创建多对多表关系的三种方式

Posted xiongchao0823

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建多对多表关系的三种方式相关的知识,希望对你有一定的参考价值。

创建多对多表关系的三种方式

第一种(django自动创建)

优点是django自动创建的,并且可以使用django中的方法

缺点是不可以在关系表中添加其他的字段

1. models.py

class Author(models.Model):
    ...
    books = models.ManyToManyField(to="Book")
    
class Book(models.Model):
    ...

第二种(手动创建一张关系表)

优点在于可以任意增加新字段

缺点是在orm查询时,很多方法不支持,查询会很麻烦

class Author(models.Model):
    ...
 
class Book(models.Model):
    ...
    
class AuthorToBook(models.Model):
    author = models.ForeignKey(to='Author') 
    book = models.Foreignkey(to='Book')
    ... # 还可以添加很多字段

ForeignKey会自动添加 _id ,那么 author就会变成author_id

第三种(结合版) - 在设计项目的时候要给自己留一条后路

有个缺点就是不可以使用对关系表进行操作的功能了,add,set,remove,clear

class Author(models.Model):
    ...
    books = models.ManyToMany(to='Book', through='AuthorToBook', though_field=('author', 'book'))
    
class Book(models.Model):
    ...
    
class AuthorToBook(models.Model):
    author = models.ForeignKey(to='Author')
    book = models.ForeignKey(to='Book')
    ... # 还可以添加很多字段

through=: 指定那张表为关系表

though_field=: 指定关系表中的字段名,顺序是在那个表中使用ManyToMany多对多建立关系,那么第一个位置就是当前表在关系表中对应的字段, 也就是说在那个表里面,那个表在关系表中对应的字段就排前面.

以上是关于创建多对多表关系的三种方式的主要内容,如果未能解决你的问题,请参考以下文章

创建多对多表关系的三种方式

第六章创建多对多关系的三种方式

建表原则

图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化

图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化

mysql多表之间的关系及其建表原则