定义基表的时候,在表类中定义:
class Meta:
# 基表,为抽象表,是专门用来被继承,提供公有字段的,自身不会完成数据库迁移
abstract = True
1,一对多:一般外键字段建在多的一方,;
2,多对多:一般外键字段建在查询频率高的一方;
3,一对一:外键字段要根据实际需求建立在合理的位置;
? 作者表与作者详情表一对一,作者详情依赖于作者表,外键字段一般建在作者详情表
? 1.to管理的表,关联表在上方需要加引号,利用反射关联;但是建议你在关联的表的下面建立关联不需要加引号,不需要反射,用途更广泛。
? 2.related_name在外键中设置反向查询的字段名:正向找字段名,反向找related_name值。
? 3.on_delete在外键字段必须设置表示级联关系,在Django1.xx下系统默认提供(值为:models.CASCADE),在Django2.x,必须手动明确CASAADE的值。
? 4.db_constraint在外键中控制表的关联,默认为True设置False表示断开关联。
总体理解:将表及表关系建立之后,再利用db_constraint=False将表断关联,然而对一联表增删改查没有任何影响。断表之后关联字段可以用以下4种操作:
on_delete=modles.CASCADE ;
? 1.CASCADE ==>默认值,级联
? 2.DO_NOTHING==>外键不会被级联,假设A表依赖B表,B记录删除,A表的外键字段不做任何处理;
? 3.SET_DEFAULT==>假设A表依赖B表,B记录删除,A表的外键字段置为default属性设置的值,所以必须配合default属性使用;
? 4.SET_NULL==>假设A表依赖B表,B记录删除,A表的外键字段置为null,所以必须配合null=True属性使用;
? 举个例子:
? A依赖B,先插入A记录,该记录对应的B记录没产生,在没有关联的情况下,该操作可以实现,但是数据就是脏数据;
? 接着再将B数据添加,脏数据就得到处理了。反过来先操作B后操作A,更满足逻辑思维,一样可以执行。通过逻辑将AB表进行# 连表查询,不会有任何异常
原文:https://www.cnblogs.com/mqhpy/p/12103781.html