django的连表有三种结构:
- 一对多:models.ForeignKey(其他表)
ForeignKey(ForeignObject) to, # 要关联的表名 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(可执行对象) related_name=None # 反向操作时,使用的字段用,用于代替 [表名——set],如obj.表名_set.all() related_query_name=None # 反向操作时,使用的连接前缀,用于替换 [表名] # 如: models.UserGroup.objects.filter(表名__字段名=1).values('表名__字段名') limit_choices_to=None # 在Admin或ModelForm中显示关联数据时,提供的条件: # 如: - limit_choices_to={'nid__gt': 5} - limit_choices_to=lambda : {'nid__gt': 5} parent_link=False # 在Admin中是否显示关联数据 to_field=None # 要关联的表中的字段名称 db_constraint=True # 是否在数据库中创建外键约束
- 多对多:models.ManyToManyField(其他表)
ManyToManyField(RelatedField) to, # 要进行关联的表名 related_name=None, # 反向操作时,使用的字段名,用于代替 【表名_set】 如: obj.表名_set.all() related_query_name=None, # 反向操作时,使用的连接前缀,用于替换【表名】 limit_choices_to=None, # 在Admin或ModelForm中显示关联数据时,提供的条件: symmetrical=None, # 仅用于多对多自关联时,symmetrical用于指定内部是否创建反向操作的字段 through=None, # 自定义第三张表时,使用字段用于指定关系表 through_fields=None, # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表 db_constraint=True, # 是否在数据库中创建外键约束 db_table=None, # 默认创建第三张表时,数据库中表的名称
- 一对一:models.OneToOneField(其他表)
OneToOneField(ForeignKey) to, # 要进行关联的表名 to_field=None # 要关联的表中的字段名称 on_delete=None, # 当删除关联表中的数据时,当前表与其关联的行的行为