1. 程式人生 > 其它 >多對多關聯關係的三種方式

多對多關聯關係的三種方式

一、多對多三種表關係

全自動:利用orm自動幫我們建立第三張關係表

class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author')
class Author(models.Model):
    name = models.CharField(max_length=32)
"""
    優點:程式碼不需要你寫 非常的方便 還支援orm提供操作第三張關係表的方法...
    不足之處:第三張關係表的擴充套件性極差(沒有辦法額外新增欄位...)
"""
純手動
class Book(models.Model):
    name = models.CharField(max_length=32)
    
class Author(models.Model):
    name = models.CharField(max_length=32)
  
class Book2Author(models.Model):
    book_id = models.ForeignKey(to='Book')
    author_id = models.ForeignKey(to='Author')
'''
  優點:第三張表完全取決於你自己進行額外的擴充套件
  不足之處:需要寫的程式碼較多,不能夠再使用orm提供的簡單的方法
  不建議你用該方式
  
'''

半自動

class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author',
                                     through='Book2Author',
                                     through_fields=('book','author')
                                     )
class
Author(models.Model): name = models.CharField(max_length=32) # books = models.ManyToManyField(to='Book', # through='Book2Author', # through_fields=('author','book') # ) #可以寫在BOOK表或者Author表中,,注意to=哪個表,through_fields裡面欄位的順序(在哪個表中,哪個順序就在前面) class Book2Author(models.Model): book = models.ForeignKey(to='Book') author = models.ForeignKey(to='Author') """ through_fields欄位先後順序 判斷的本質: 通過第三張表查詢對應的表 需要用到哪個欄位就把哪個欄位放前面 你也可以簡化判斷 當前表是誰 就把對應的關聯欄位放前面 半自動:可以使用orm的正反向查詢 但是沒法使用add,set,remove,clear這四個方法