ForeignKey(ForeignObject)
blog = models.ForeignKey(
to="Blog",
to_field="nid",
on_delete=models.DO_NOTHING)
# 外键关联博客,一个博客站点可以有多个分类
字段
to, # 要进行关联的表名
to_field = None, # 要关联的表中的字段名称
on_delete = None, # 当删除关联表中的数据时,当前表与其关联的行的行为
- 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),)
# 反向操作时,使用的字段名,用于代替【表名_set】
related_name = None,
如: obj.表名_set.all() == obj.related_name.all()
# 反向操作时,使用的连接前缀,用于替换【表名】 如:
related_query_name = None,
models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名')
# 在Admin或ModelForm中显示关联数据时,提供的条件:
limit_choices_to = None,
# 如:
- limit_choices_to = {'nid__gt': 5}
- limit_choices_to = lambda: {'nid__gt': 5}
from django.db.models import Q
- limit_choices_to = Q(nid__gt=10)
- limit_choices_to = Q(nid=8) | Q(nid__gt=10)
- limit_choices_to = lambda: Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root')
db_constraint = True # 是否在数据库中创建外键约束
parent_link = False # 在Admin中是否显示关联数据