• Django-ORM-1:orm的字段和参数


    一、orm的常用字段

    • AutoField

      • int自增字段,配合primary_key=True,将字段设置成主键。django系统会默认给每张表设置主键。
    • IntegerField

      • 整数
    • CharField

      • 字符串类型,必须配合max_length参数,底层使用varchar来存数据,需要给定最大长度
    • DateField

      • 日期格式,YYYY-MM-DD

      • auto_now =True  每次更新数据时,会将当前时间写入
        auto_add_now =True 首次创建数据时,将创建时间写入
        
        • 1
        • 2
    • DateTimeField

      • 日期时间格式,YYYY-MM-DD HH:mm:ss

      • auto_now =True  每次更新数据时,会将当前时间写入
        auto_add_now =True 首次创建数据时,将创建时间写入
        
        • 1
        • 2
    • FileField

      • 接收文件(包括图片),配合参数upload_to=‘media文件夹中的目录’,设置默认值时,不能以/结尾
    • Boolean

      • 布尔类型,True 或False
    • EmailField

      • 邮件类型,给检验组件使用的

    二、ORM中关系型字段

    • OneToOneField

      • #参数如下
        to:设置要关联的表
        to_field:设置要关联的表的字段
        on_delete:同ForeignKey字段。设置成级联删除
        
        • 1
        • 2
        • 3
        • 4
    • ForeignKey,写在多的一方

      • to:设置要关联的表
        
        to_field:设置要关联的表的字段
        
        related_name:反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。但不建议使用
        
        related_query_name:反向查询操作时,使用的连接前缀,用于替换表名。
        
        on_delete:当删除关联表中的数据时,当前表与其关联的行的行为
        
        db_constraint:是否在数据库中创建外键约束,默认为True。可以设置为False,提高查询速度,且不影响查询操作。
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
      • on_delete有以下操作

      	models.CASCADE
        级联删除,有外键关系的数据都删除掉,比较危险,业务一般不设置
      
        models.DO_NOTHING
        删除关联数据,引发错误IntegrityError,
      
        models.PROTECT
        删除关联数据,引发错误ProtectedError
      
        models.SET_NULL
        删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
      
        models.SET_DEFAULT
        删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
      
        models.SET
        删除关联数据,
        a. 与之关联的值设置为指定值,设置:models.SET(值)
        b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
    • ManyToManyField

      • to:设置要关联的表
        
        to_field:设置要关联的表的字段
        
        related_query_name:反向查询操作时,使用的连接前缀,用于替换表名。
        
        symmetrical:仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。
        
        through:设置关联的字段。
        
        through_fields:设置关联的字段。
        
        db_table:默认创建第三张表时,数据库中表的名称。
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14

    多对多关系如何创建表:

    一、通过手动创建第三张表操作

    class Book(models.Model):
        title = models.CharField(max_length=32, verbose_name="书名")
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32, verbose_name="作者姓名")
    
    
    # 需要手动维护多对多关系,
    class Author2Book(models.Model):
        author = models.ForeignKey(to="Author")
        book = models.ForeignKey(to="Book")
    
        class Meta:
        #联合唯一
            unique_together = ("author", "book")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    二、自动创建第三张表

    class Book(models.Model):
        title = models.CharField(max_length=32, verbose_name="书名")
    
    
    # 通过ORM自带的ManyToManyField自动创建第三张表
    class Author(models.Model):
        name = models.CharField(max_length=32, verbose_name="作者姓名")
        books = models.ManyToManyField(to="Book", related_name="authors")
        '''
        to 与哪张表进行联系
        related_name  第三张表的名字
        '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    三、半自动

    class Book(models.Model):
        title = models.CharField(max_length=32, verbose_name="书名")
    
    
    # 自己创建第三张表,并通过ManyToManyField指定关联
    class Author(models.Model):
        name = models.CharField(max_length=32, verbose_name="作者姓名")
        books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
     	'''
     	to  与哪张表建立多对多关系
     	through 通过第三张表实现多对多关系
     	 through_fields('当前表小写','另一张表小写')
     	'''
    
    
    class Author2Book(models.Model):
        author = models.ForeignKey(to="Author")
        book = models.ForeignKey(to="Book")
    
        class Meta:
            unique_together = ("author", "book")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5.元信息
    ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:

    db_table
    ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。

    index_together
    联合索引。

    unique_together
    联合唯一索引。

    ordering
    指定默认按什么字段排序。

    只有设置了该属性,我们查询到的结果才可以被reverse()。

    三、字段的参数

    • null ,值True 或False,是否允许为空,默认False
    • unique,True或False,是否唯一,默认是False
    • db_index 默认是False,设置索引,默认给主键设置了True
    • defalut 给字段设置默认值
    • choices 设置选择项
    • verbose_name 显示的字段名称
    • help_text admin中该字段的提示信息
  • 相关阅读:
    Openwrt_树莓派B+_Wifi中继
    设计模式-14-迭代器模式
    ChatGPT 问世一周年之际,开源大模型能否迎头赶上?
    如何在快节奏的生活下摆脱焦虑?
    Leetcode1710:卡车上的最大单元数
    桥接模式 ( Bridge Pattern )(7)
    在VMware虚拟机中固定CentOS系统ip(使用桥接模式)
    德语B级SampleAcademy
    大数据项目之电商数仓、数据仓库概念、项目需求及架构设计
    Python的异常处理
  • 原文地址:https://blog.csdn.net/weixin_46371752/article/details/126375921