多表方案: 如何确定表关系呢? 表关系是在2张表之间建立的,没有超过2个表的情况。 那么相互之间有2条关系线,先来判断一对多的关系。 如果其中一张表的记录能够对应另外一张表的多条记录,那么关系线成立! 如果只有一条线成立,那么就是一对多的关系。 如果有2条线成立,那么就是多对多的关系。 比如book和publish。一本书不能对应多个出版社(常规是这样的,否则就盗版了),那么不成立。 一个出版社可以对应多本书,关系线成立。所以book和publish表的关系是一对多的关系 多对多的关系,就是2张表互相对应多条记录。 比如book和author。一本书可以有多个作者,一个作者可以写多本! 一对一的关系,就很简单了,彼此唯一。 比如author和authordetail是一对一的关系。 一对多: book和publish表的关系是一对多的关系 一旦确定一对多的关系:在多的表中创建关联字段 # 与Publish建立一对多的关系,外键字段建立在多的一方 publish=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE) #创建的字段名为publish_id。它会自动加_id后缀 多对多: book和author是多对多的关系 一旦确定多对多的关系:创建第三张关系表 # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors=models.ManyToManyField(to="Author") #注意:表名为应用名+book类名小写+authors,也就是book_authors。 #它只有3个字段,分别是主键id,book_id,author_id。 #book_id和author_id分别表示book表和author表的主键id 一对一: author和authordetail是一对一的关系 一旦确定一对一的关系 : 创建关联字段(任意一张表创建都可以) #但是一般,我们会判断谁是重要的,谁是次要的。在重要的表上面创建关联字段!比如author #由于authordetail表是author表的延伸,所以在author表创建关联字段 # 与AuthorDetail建立一对一的关系 ad=models.OneToOneField(to="AuthorDetail",to_field="id",on_delete=models.CASCADE,) #创建的字段名为ad_id,它会自动加_id后缀。一对一关联字段,必须设置唯一属性!
相关文章: