AutoField
IntegerField
CharField
DateField
日期格式,YYYY-MM-DD
auto_now =True 每次更新数据时,会将当前时间写入
auto_add_now =True 首次创建数据时,将创建时间写入
DateTimeField
日期时间格式,YYYY-MM-DD HH:mm:ss
auto_now =True 每次更新数据时,会将当前时间写入
auto_add_now =True 首次创建数据时,将创建时间写入
FileField
Boolean
EmailField
OneToOneField
#参数如下
to:设置要关联的表
to_field:设置要关联的表的字段
on_delete:同ForeignKey字段。设置成级联删除
ForeignKey,写在多的一方
to:设置要关联的表
to_field:设置要关联的表的字段
related_name:反向操作时,使用的字段名,用于代替原反向查询时的'表名_set'。但不建议使用
related_query_name:反向查询操作时,使用的连接前缀,用于替换表名。
on_delete:当删除关联表中的数据时,当前表与其关联的行的行为
db_constraint:是否在数据库中创建外键约束,默认为True。可以设置为False,提高查询速度,且不影响查询操作。
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(可执行对象)
to:设置要关联的表
to_field:设置要关联的表的字段
related_query_name:反向查询操作时,使用的连接前缀,用于替换表名。
symmetrical:仅用于多对多自关联时,指定内部是否创建反向操作的字段。默认为True。
through:设置关联的字段。
through_fields:设置关联的字段。
db_table:默认创建第三张表时,数据库中表的名称。
多对多关系如何创建表:
一、通过手动创建第三张表操作
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")
二、自动创建第三张表
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 第三张表的名字
'''
三、半自动
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")
5.元信息
ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:
db_table
ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。
index_together
联合索引。
unique_together
联合唯一索引。
ordering
指定默认按什么字段排序。
只有设置了该属性,我们查询到的结果才可以被reverse()。