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

news2024/9/23 21:22:05

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.coloradmin.cn/o/735340.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构之图

7 图的存储 (1)图的邻接矩阵存储 对于无向图,邻接矩阵第i行/列上非零元素个数是顶点vi的度。 对于有向图,邻接矩阵第i行上非零元素个数是顶点vi的出度,第i列 上非零元素个数是顶点vi的入度。 对于带权有向图有边则…

常见面试题之垃圾收回

1. 简述Java垃圾回收机制?(GC是什么?为什么要GC?) 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制&#x…

javaUDP数据报套接字编程

0.前言 对于UDP协议来说,具有无连接,面向数据报的特征,即每次都是没有建立连接,并且一次发送全部数 据报,一次接收全部的数据报。 java中使用UDP协议通信,主要基于 DatagramSocket 类来创建数据报套接字&a…

探索人工智能的奇妙世界:解密AI技术的未来发展

作为一名热爱技术的开发者,当谈到人工智能(AI)和焦虑商业化时,我总会面临一个困境:到底是愁眉苦脸,还是开怀大笑?让我带你走进这个有趣又争议的话题。 首先我们需要面对AI的自学能力。这些智能…

Django4.0+使用rest_framework_jwt的问题

问题描述 python版本:3.10 Django版本:4.1 djangorestframework-jwt版本:1.11.0 在写jwt认证功能时,发现run的时候会报以下错误 from django.utils.translation import ugettext as _ ImportError: cannot import name ugettext…

day69_Vue进阶

今日内容 零、 复习昨日 零、 复习昨日 nginx 静态服务器(动静分离)反向代理服务器(代理后端服务器)负载均衡异步 前端工程化 —> java代码工程 一、使用Vue-Cli搭建Vue项目 1.1 什么是vue-cli cli: Command Line 命令行工具,vue-cli就是vue的命令行工具&#xf…

ThreadPoolExecutor 线程池源码学习

ThreadPoolExecutor 线程池源码学习 1.阅读源码 1.ThreadPoolExecutor.execute public void execute(Runnable command) {if (command null)throw new NullPointerException();// ctl 高三位记录线程状态。低29位记录线程池中线程数int c ctl.get();//位运算获取工作线程数 …

wireshark抓包实践

目录 ifconfig ( network interfaces configuring )tcpdump 命令tcpdump&wireshark例子 ifconfig ( network interfaces configuring ) eth0表示网卡UP代表网卡开启状态RUNNING代表网卡的网线被接上mtu1500: MTU(最大传输单元)是指在网络中传输数据时…

【javaEE面试题(五)在JMM(Java Memory Model (Java 内存模型))下谈volatile的作用】

volatile的作用 JMM下volatile作用 volatile 能保证内存可见性 volatile 修饰的变量, 能够保证 “内存可见性”. 代码在写入 volatile 修饰的变量的时候 改变线程工作内存中volatile变量副本的值将改变后的副本的值从工作内存刷新到主内存 代码在读取 volatile 修饰的变量的时…

B067-基础环境-抽取Basegit

目录 抽取base抽取domain和querymapper接口抽取service抽取 Git优点:Git安装及操作Git Bash命令行操作图形化客户端TortoiseGit操作Git集成Idea操作idea会把workspace作为本地仓库gitee操作idea解决代码冲突 抽取base 抽取domain和query domain:所有实体…

Nodejs 依赖包的存放路径设置(按其他博客修改路径后,安装路径仍在C盘的解决办法)

Nodejs 依赖包的存放路径设置 使用命令npm root -g 查看依赖包的安装位置 默认依赖包的安装位置是在C盘。为了防止C盘存太多东西,我这里已经将安装位置改到了D盘,下面就记录下修改的步骤。 1. 创建新的依赖包安装目录 在 nodejs 的安装目录下创建两个新…

8年资深测试总结,性能测试+性能优化(详细)进军高级测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能优化常见概念…

LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序

LabVIEW FPGA利用响应式数字电子板快速开发空间应用程序 与传统的基于文本的语言相比,LabVIEW的编程和设计已被证明可以缩短开发时间。各种研究表明,生产率的提高在3到10倍之间。LabVIEW通过图形语言、集成开发环境和多个编译器的组合来实现这一点。 图…

qt对话框

完善文本编辑器 #include "second.h" #include "ui_second.h"second::second(QWidget *parent) :QWidget(parent),ui(new Ui::second) {ui->setupUi(this);this->setWindowTitle("聊天室界面");//设置标题this->setWindowIcon(QIcon(&…

边缘检测

目录 1、边缘检测原理 2、Sobel算子边缘检测 3、Scharr算子边缘检测​编辑 4、算子生成函数 5、Scharr、Sobel的使用 6、Laplacian算子边缘检测 7、Canny算子边缘检测 8、Laplacian、Canny的使用 1、边缘检测原理 2、Sobel算子边缘检测 3、Scharr算子边缘检测 4、算子生成函…

MySQL数据库 - 表的操作

目录 一、创建表 二、创建表案例 1、显示当前使用的数据库名 2、创建表 2.1 MyISAM存储引擎表 2.2 InnoDB存储引擎表 三、查看表结构 四、修改表 1、新增列 2、修改列类型 3、修改列名 4、修改表名 5、删除列 五、删除表 表的操作至少会涉及如下两类SQL语句&…

adb日常使用命令

重启电脑adb服务 adb start-server和adb kill-server mac中uiautoviewer的位置 android-sdk→tools→bin→uiautomatorviewer.bat adb查看本机abi类型 adb shell getprop ro.product.cpu.abi github 比较好的adb教程: https://github.com/mzlogin/awesome-adb a…

[VUE学习]权限管理系统前端vue实现9-动态路由,动态标签页,动态面包屑

1.动态路由 1.因为我们左侧权限菜单是根据不同用户显示不一样的 所以我们需要使用动态路由 来动态生成右侧路由信息 在总体布局页面添加router <router-view> 是 Vue Router 提供的组件&#xff0c;用于动态展示匹配到的路由组件内容。通过在合适的位置放置 <router-v…

将word中超链接的字体颜色更换成白色

文章目录 1、问题描述2、解决方法&#xff08;两种&#xff09;2.1 临时修改2.2 永久修改 1、问题描述 超链接是蓝色&#xff0c;需要将其换成正常颜色的字体 2、解决方法&#xff08;两种&#xff09; 2.1 临时修改 直接选中该字体&#xff0c;从字体的颜色那里选主题颜色…

zabbix安装监控客户端应用

添加 zabbix 客户端主机 服务端和客户端都配置时间同步 服务端和客户端都设置 hosts 解析 设置 zabbix 的下载源&#xff0c;安装 zabbix-agent2 在服务端验证 zabbix-agent2 的连通性 ​编辑 在 Web 页面中添加 agent 主机 自定义监控内容 在客户端创建自定义 key 1.明确…