Django創建多對多表關系的三種方式


方式一:全自動(不推薦)

  • 優點:django orm會自動創建第三張表
  • 缺點:只會創建兩個表的關系字段,不會再額外添加字段,可擴展性差
class Book(models.Model):
    # ...
    authors = models.ManyToManyField(to='Author')
    
class Author(models.Model):
    # ...
    pass

方式二:純手動(不推薦)

  • 優點:第三張表可以根據自己的要求隨意添加額外的字段
  • 缺點:orm在查詢的時候,很多方法不支持,查詢非常麻煩
class Book(models.Model):
    # ...
    pass
    
class Author(models.Model):
    # ...
    pass
    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ...
    pass

方式三:半自動

  • 優點:手動建表,但要告訴orm第三張表是自己建的,orm只需要提供查詢方法
  • 缺點:雖然可以使用orm的查詢方法,但不支持使用add(), set(), remove(), clear()
class Book(models.Model):
    # ...
    authors = models.ManyToManyField(to='Author', through='Book_Author', through_fields=('book', 'author'))

class Author(models.Model):
    # ...
    books = models.ManyToManyField(to='Book', through='Book_Author', through_fields=('author', 'book'))
    
class Book_Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')
    # ....
  • 說明:
    • 半自動在創建外鍵的時候,要添加兩個參數,through='關系表名‘和through_fiedls=('此表在關系表中字段名‘, '關聯表在關系表中的字段名')
    • through_fiedls中的字段順序:第三張表通過哪個字段查詢單表,就把哪個字段放在前面
    • 方法三的好處:在項目后續迭代更新中,如果有需求,可向關系表中增加字段,給自己留條后路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM