上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作。

 

一、一对多:models.ForeignKey()

应用场景:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择), 例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等

 1 ForeignKey(ForeignObject) # ForeignObject(RelatedField)
 2         to,                         # 要进行关联的表名
 3         to_field=None,              # 要关联的表中的字段名称
 4         on_delete=None,             # 当删除关联表中的数据时,当前表与其关联的行的行为
 5                                         - models.CASCADE,删除关联数据,与之关联也删除
 6                                         - models.DO_NOTHING,删除关联数据,引发错误IntegrityError
 7                                         - models.PROTECT,删除关联数据,引发错误ProtectedError
 8                                         - models.SET_NULL,删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)
 9                                         - models.SET_DEFAULT,删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)
10                                         - models.SET,删除关联数据,
11                                                       a. 与之关联的值设置为指定值,设置:models.SET(值)
12                                                       b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
13 
14                                                         def func():
15                                                             return 10
16 
17                                                         class MyModel(models.Model):
18                                                             user = models.ForeignKey(
19                                                                 to="User",
20                                                                 to_field="id"
21                                                                 on_delete=models.SET(func),)
22         related_name=None,          # 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all()
23         related_query_name=None,    # 反向操作时,使用的连接前缀,用于替换【表名】     如: models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名')
24         limit_choices_to=None,      # 在Admin或ModelForm中显示关联数据时,提供的条件:
25                                     # 如:
26                                             - limit_choices_to={'nid__gt': 5}
27                                             - limit_choices_to=lambda : {'nid__gt': 5}
28 
29                                             from django.db.models import Q
30                                             - limit_choices_to=Q(nid__gt=10)
31                                             - limit_choices_to=Q(nid=8) | Q(nid__gt=10)
32                                             - limit_choices_to=lambda : Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root')
33         db_constraint=True          # 是否在数据库中创建外键约束
34         parent_link=False           # 在Admin中是否显示关联数据
35 
36 models.ForeignKey()函数的主要参数
models.ForeignKey()函数的主要参数

相关文章: