django框架中使用ORM设计数据库的模型

ORM关联数据的逻辑是:

 

Django 中常见的模型字段类型及其含义:

  1. AutoField:一个自动递增的整型字段,添加记录时它会自动增长。
  2. BigAutoField:一个自动递增的 biginteger字段,添加记录时它会自动增长。
  3. CharField:用于存储字符类型的数据,如姓名、地址、电话等。
  4. TextField:用于存储长文本类型的数据,如文章、评论等。
  5. IntegerField:用于存储整数类型的数据,如年龄、数量等。
  6. BigIntegerField:用于存储 biginteger类型的数据,比 IntegerField 更大。
  7. SmallIntegerField:用于存储 smallinteger类型的数据,比 IntegerField 更小。
  8. FloatField:用于存储浮点数类型的数据,如温度、海拔等。
  9. DecimalField:用于存储十进制类型的数据,如金额、分数等。它可以设置最大位数和小数点后的位数,支持四舍五入等设置。
  10. BooleanField:用于存储布尔类型的数据,如是否、开关状态等。它只能接受 True 或 False 两个值。
  11. DateField:用于存储日期类型的数据,如出生日期、有效期等。
  12. DateTimeField:用于存储日期和时间类型的数据,如创建时间、修改时间等。它可以设置日期和时间的格式、时区等。
  13. TimeField:用于存储时间类型的数据,如开始时间、结束时间等。
  14. FilePathField:用于存储文件路径类型的数据,它可以选择指定的文件路径。
  15. CharField:用于存储文件路径类型的数据,它可以选择指定的文件路径。
  16. EmailField:用于存储电子邮件地址类型的数据。
  17. SluginField:用于存储滑块类型的数据,它可以在一个范围内滑动并进行选择。

常用的模型字段参数及其含义:

  1. default:用于指定该字段的默认值。
    • 如果一个字段没有指定 default 参数,则在创建新的模型实例时,该字段将默认为 None 或该字段类型的空值。
    • 如果一个字段的 default 参数是一个值,则在创建新的模型实例时,该字段将默认为该值。
    • 如果一个字段的 default 参数是一个函数,则在创建新的模型实例时,该字段将调用该函数来获取默认值。
  2. choices:用于限制该字段的可选值。
    • 如果一个字段的 choices 参数是一个元组或列表,则该字段的可选值必须是其中之一。
    • 如果一个字段的 choices 参数是一个函数,则该字段在表单中显示时将调用该函数来获取可选值。
  3. max_length:用于限制该字段的最大长度。
    • 如果一个字段是字符类型(如 CharFieldTextField),则 max_length 参数指定该字段的最大长度。
    • 如果一个字段是数字类型(如 IntegerFieldFloatField),则 max_length 参数无效。
  4. min_length:用于限制该字段的最小长度。
    • 如果一个字段是字符类型(如 CharFieldTextField),则 min_length 参数指定该字段的最小长度。
    • 如果一个字段是数字类型(如 IntegerFieldFloatField),则 min_length 参数无效。
  5. validators:用于指定对该字段进行验证的验证器列表。
    • 如果一个字段的 validators 参数是一个验证器函数列表,则这些验证器函数将在保存该字段的值之前对其进行验证。
    • 如果一个字段的 validators 参数是一个字符串列表,则这些字符串将作为参数传递给一个内置的验证器函数(例如 django.core.validators.validate_email)。
  6. default_validators:用于指定对该字段进行默认验证的验证器列表。
    • 如果一个字段的 default_validators 参数是一个验证器函数列表,则这些验证器函数将在保存该字段的值之前对其进行默认验证。
  7. help_text:用于指定该字段在表单中的帮助文本。
    • 如果一个字段的 help_text 参数是一个字符串,则该字符串将被用作该字段在表单中的帮助文本,以提供额外的用户指导。
  8. db_column:用于指定该字段在数据库表中的列名。
    • 如果一个字段的 db_column 参数是一个字符串,则数据库表中的该列将使用该字符串作为列名。
  9. db_tablespace:用于指定该字段在数据库表中的表空间名。
    • 如果一个字段的 db_tablespace 参数是一个字符串,则数据库表中的该字段将存储在该表空间中。
  10. unique:用于指定该字段是否是唯一的。
    • 如果一个字段的 unique 参数为 True,则在数据库表中,该字段的值必须是唯一的。
    • 如果一个字段的 unique 参数为 False(默认值),则在数据库表中,该字段的值可以重复出现。
  11. null:用于指定该字段是否允许为空值。
    • 如果一个字段的 null 参数为 True,则在数据库表中,该字段可以为空值 NULL。
    • 如果一个字段的 null 参数为 False(默认值),则在数据库表中,该非空字段必须有一个非空的值。
  12. blank:用于指定该字段是否允许为空字符串。
    • 如果一个字段的 blank 参数为 True,则在表单中提交该非空

几种常用的方式:

#无约束

depart_id = models.BigIntegerField(verbose_name="部门ID")

1.有约束

#- to,与那张表关联

#- to_field,表中的那一列关联

2.django自动

#- 写的depart

生成数据列 depart_id

3.部门表被删除

3.1 级联删除(部门删除,他的关联部门下的人都会被删除)

depart = models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE)

3.2 置空(部门删除,他的关联部门下的人不会被删除,部门ID显示null)

depart=models.ForeignKey(to="Department",to_field="id",null=True,blank=True,on_delete=models.SET_NULL)

再来一些参考:

class Department(models.Model):

    """创建部门表"""

    models.CharField(verbose_name='标题',max_length=32)

class UserInfo(models.Model):

    """创建员工表"""

    name = models.CharField(verbose_name="姓名",max_length=16)

    password=models.CharField(verbose_name="密码",max_length=32)

    age = models.IntegerField(verbose_name="年龄")

    account = models.DecimalField(verbose_name="账户余额",max_digits=18,decimal_places=2,default=0)

    create_time = models.DateTimeField(verbose_name="创建时间")

    depart = models.ForeignKey(to="Department",to_field="id",on_delete=models.CASCADE)

    gender_choices=(

        (1,"男")

        (2,"女")

    )

    gender = models.SmallAutoField(verbose_name="性别",choices=gender_choices)

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/16082.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RPC 框架架构设计

RPC 框架架构设计 RPC 又称远程过程调用(Remote Procedure Call),用于解决分布式系统中服务之间的调用问题。通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。下面我们通过一幅图来说说 RPC 框架的基本架构。 RPC 框架…

Nginx学习

文章目录 Nginx什么是NginxLinux安装与配置Nginx编译安装Nginxnignx使用nginx默认首页配置案例 localtion的匹配规则Nginx虚拟主机基于多IP的虚拟主机基于多端口的虚拟主机基于域名的虚拟机主机 反向代理案例①案例② 负载均衡案例①案例②分配策略 动静分离案例 配置Nginx网关…

分布式监控之Zabbix6.0监控系统一

分布式监控之Zabbix6.0监控系统 前言一、Zabbix1、介绍2、zabbix监控原理3、Zabbix6.0版本新特性4、Zabbix6.0功能组件5、Zabbix与Prometheus对比 二、Zabbix6.0部署1、部署zabbix服务端2、添加 zabbix 客户端主机3、自定义监控内容4、zabbix 自动发现5、zabbix 自动注册 前言 …

从零搭建一台基于ROS的自动驾驶车-----4.定位

系列文章目录 北科天绘 16线3维激光雷达开发教程 基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图 Nvidia Jetson Nano学习笔记–串口通信 Nvidia Jetson Nano学习笔记–使用C语言实现GPIO 输入输出 Autolabor ROS机器人教程 从零搭建一台基于ROS的自动驾驶车-----1.整体介…

C语言库函数strcpy学习

strcpy是C语言的一个标准库函数&#xff1b; strcpy把含有\0结束符的字符串复制到另一个地址空间&#xff0c;返回值的类型为char*。 原型声明&#xff1a;char *strcpy(char* dest, const char *src); 头文件&#xff1a;#include <string.h> 和 #include <stdio.h&g…

MySQL:我的从库竟是我自己!?

本文将通过复制场景下的异常分析&#xff0c;介绍手工搭建MySQL主从复制时需要注意的关键细节。 作者&#xff1a;秦福朗 爱可生 DBA 团队成员&#xff0c;负责项目日常问题处理及公司平台问题排查。热爱互联网&#xff0c;会摄影、懂厨艺&#xff0c;不会厨艺的 DBA 不是好司机…

当某个微服务重启后,GateWay网关访问服务出现503的问题

因为开发阶段可能需要经常重启微服务&#xff0c;但有时会莫名奇妙返回503 Service Unavailable 由于从springcloud2020版本开始&#xff0c;弃用了Ribbon&#xff0c;因此Alibaba在2021及之后版本的nacos中删除了Ribbon的jar包&#xff0c;因此无法通过loadbalancer路由到指定…

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记

LSTD: A Low-Shot Transfer Detector for Object Detection论文阅读笔记 提出low-shot Transfer detector&#xff0c;来解决标注样本数据不足的情况。利用source domain知识&#xff0c;来构建高效的target-domain检测器&#xff0c;仅需要很少的训练样本。 提出了一个高效的…

【MySQL系列】MySQL库的学习及基本操作(增删查改)

「前言」文章内容大致是数据库的基本操作 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 哪里会有人喜欢孤独&#xff0c;不过是不喜欢失望罢了。 ——村上春树《挪威的森林》 目录 一、创建/查看数据库二、删除数据库三、…

飞控学习笔记-IMU姿态算法

扩展卡尔曼滤波算法 传感器融合算法 卡尔曼滤波算法 最小二乘法 毕卡逼近法 对上式进行泰勒展开 得到四元数各阶近似算法&#xff1a; 梯度下降算法 梯度下降 互补滤波算法 chatgpt解释&#xff1a; 互补滤波&#xff08;Complementary Filter&#xff09;算法是一种常用…

OpenCV的remap实现图像垂直翻转

以下是完整的代码: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>int main() {

OpenCV 入门教程:全局阈值处理

OpenCV 入门教程&#xff1a;全局阈值处理 导语一、全局阈值处理二、示例应用2.1 图像二值化2.2 图像去噪 总结 导语 全局阈值处理是图像处理中常用的技术之一&#xff0c;用于将图像转换为二值图像&#xff0c;从而提取感兴趣的目标区域。在 OpenCV 中&#xff0c;全局阈值处…