创建多对多表关系的三种方式
Posted jhpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建多对多表关系的三种方式相关的知识,希望对你有一定的参考价值。
创建多对多表关系的三种方式
"""
在设计项目的时候 一定要考虑的其它的要求,要让程序有扩展性, 防止后续的迭代更新...
尤其是数据库,必须要有扩展性
"""
全自动
好处就是django orm会自动帮你创建第三张关系表,你完全不用手动再去创建了
缺点是它帮你创建的第三张关系表 不会再额外添加字段,虽然有点方便,但是第三张表扩展性差,不能够随意添加额外的字段
authors = models.ManyToManyField(to=‘Author‘)
纯手动(不是很好)
虽然说不是很好,但是也是稍微有点好处的,好处就在于第三张表可以任意添加额外的字段
缺点就是orm查询的时候, 很多方法都不支持,查询的时候过于麻烦,拖时间
class Book(models.Model): ... class Author(models.Models): ... class BookAuthor(models.Model): book_id = models.ForeignKey(to='Book') author_id = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True) ...
半自动(较为好用):
个人认为还是不错的,手动建表,但是你要告诉orm,跟它讲你建了第三张关系表.orm你帮我提供查询方法吧
缺点是不支持使用 add() set() remove() clear()
from django.db import models class Book(models.Model): authors = models.ManyToManyField(to='Author',through='BookAuthor', through_fields=('book',author)) class Author(models.Model): ... class BookAuthor(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') create_time = models.DateField(auto_now_add=True)
## 注意点
半自动 一定要加两个参数
即通过哪张表建立关系,通过哪些字段建立关系
through = ‘BookAuthor‘,through_fields=(‘book‘,‘author‘)
后面字段的顺序
通过那个字段查询单表就把哪个字段放前面.
以上是关于创建多对多表关系的三种方式的主要内容,如果未能解决你的问题,请参考以下文章
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化
图书管理的图书增删改查choices参数MTV与MVC模型多对多关系的三种创建方式Ajax操作前后端传输数据编码格式ajax发送json格式数据ajax发送文件django自带的序列化