foreignkey相关的参数

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中是否显示关联数据
posted @ 2021-08-03 14:40  Οo白麒麟оΟ  阅读(150)  评论(0编辑  收藏  举报