ORM字段, ORM字段参数, 关系字段,元信息

目录

  1. ORM 字段
  2. ORM字段参数
  3. 关系字段
  4. 元信息

1. 常用字段

AutoField

int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

IntegerField

一个整数类型,范围在 -2147483648 to 2147483647。

CharField

字符类型,必须提供max_length参数, max_length表示字符长度。

DateField

日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。

DateTimeField

日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例

2. ORM字段参数

null

null=True表示该字段可以为空。

unique

如果设置为unique=True 则该字段在此表中必须是唯一的 。

db_index

如果db_index=True 则代表着为此字段设置索引

default

为该字段设置默认值。

DateField和DateTimeField字段专属

auto_now_add

配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

auto_now

配置上auto_now=True,每次更新数据记录的时候会更新该字段。

3. 关系字段

1. ForeignKey

一般把ForeignKey字段设置在 '一对多'中'多'的一方。

to

设置要关联的表

to_field

设置要关联的表的字段

related_name

反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。

class Classes(models.Model):
    name = models.CharField(max_length=32)

class Student(models.Model):
    name = models.CharField(max_length=32)
    theclass = models.ForeignKey(to="Classes", related_name="students")

查询某个班级关联的所有学生(反向查询)时 , 查询语句
由: models.Classes.objects.first().student_set.all()
变为: models.Classes.objects.first().students.all()

related_query_name

反向查询操作时,使用的连接前缀,用于替换表名。

db_constraint

是否在数据库中创建外键约束,默认为True。

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(可执行对象)

        def func():
            return 10

        class MyModel(models.Model):
            user = models.ForeignKey(
            to="User",
            to_field="id",
            on_delete=models.SET(func)
        )

4. 元信息

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

db_table

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

index_together

联合索引。

unique_together

联合唯一索引。

ordering

指定默认按什么字段排序。
只有设置了该属性,我们查询到的结果才可以被reverse()。

eg:
    class UserInfo(models.Model):
        nid = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)

        class Meta:
            # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
            db_table = "table_name"

            # 联合索引
            index_together = [
                ("pub_date", "deadline"),
            ]

            # 联合唯一索引
            unique_together = (("driver", "restaurant"),)
            
            ordering = ('name',)
            
            # admin中显示的表名称
            verbose_name='哈哈'

            # verbose_name加s
            verbose_name_plural=verbose_name

你可能感兴趣的:(ORM字段, ORM字段参数, 关系字段,元信息)