码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-29 22:08:54      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:扩展   就是   python   auth   支持   好处   move   import   orm   

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

"""
在设计项目的时候  一定要考虑的其它的要求,要让程序有扩展性, 防止后续的迭代更新...
尤其是数据库,必须要有扩展性
"""
  1. 全自动

    好处就是django orm会自动帮你创建第三张关系表,你完全不用手动再去创建了

    缺点是它帮你创建的第三张关系表 不会再额外添加字段,虽然有点方便,但是第三张表扩展性差,不能够随意添加额外的字段

    authors = models.ManyToManyField(to=‘Author‘)

  2. 纯手动(不是很好)

    虽然说不是很好,但是也是稍微有点好处的,好处就在于第三张表可以任意添加额外的字段

    缺点就是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)
                    ...
  3. 半自动(较为好用):

    个人认为还是不错的,手动建表,但是你要告诉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)
    

## 注意点

  1. 半自动 一定要加两个参数

    即通过哪张表建立关系,通过哪些字段建立关系

    through = ‘BookAuthor‘,through_fields=(‘book‘,‘author‘)

  2. 后面字段的顺序

    通过那个字段查询单表就把哪个字段放前面.

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

标签:扩展   就是   python   auth   支持   好处   move   import   orm   

原文地址:https://www.cnblogs.com/jhpy/p/11761513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!