第六章创建多对多关系的三种方式
Posted demiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章创建多对多关系的三种方式相关的知识,希望对你有一定的参考价值。
第六章、创建多对多关系的三种方式
一、创建多对多关系的三种方式
1. 全自动(推荐指度**)
全自动:利用 ManyToManyField 让 django 自动创建第三张表
优点:不需要手动创建第三张表
不足:由于第三张表不是你手动创建的,也就意味着第三张表中字段是固定的,无法做扩展
class Book(models.Model):
...
authors = models.ManyToManyField(to='Author')
class Author(models.Models):
...
2. 纯手动(不推荐)
纯手动:手动创建第三张表,然后利用 Foreignkey 自己做两张表的关联
优点:第三张表可以新增任意字段,扩展性较高
不足:查询不方便,基于双下划线、对象的反向查询都不支持了
class Book(models.Model):
...
class Author(models.Models):
...
class Book2Author(models.Model):
book_id = models.ForeignKey(to='Book')
author_id = models.ForeignKey(to='Author')
create_time = models.DateField(auto_now_add=True)
...
3. 半自动(******)
半自动:自己创建第三张表,利用 ManyToManyField 在某张表指定关联关系
优点:可以自定义字段,依旧支持基于双下划线、对象的反向查询,可扩展性高
多对多字段的方法不支持了(add,set,remove,clear)
class Book(models.Model):
...
authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book','author'))
class Author(models.Model):
...
books = models.ManyToManyField(to='Book', through='Book2Author', through_fields=('author', 'book'))
class Book2Author(models.Model):
book = models.ForeignKey(to='Book')
author = models.ForeignKey(to='Author')
create_time = models.DateField(auto_now_add=True)
说明:
orm只需要给我提供方便的查询方法
第三种虽然可以使用orm查询方法
但是不支持使用
add()
set()
remove()
clear()
# 1.半自动 一定要加两个额外的参数
through='Book2Author', through_fields=('book','author')
# 2.后面字段的顺序
由第三张表通过哪个字段查询单表 就把哪个字段放前面
以上是关于第六章创建多对多关系的三种方式的主要内容,如果未能解决你的问题,请参考以下文章
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化