2017-07-21 41 views
0

我有以下的數據庫模型自動更新多對多場

class Author(models.Model): 
    choices=['Mr.','Mrs.','Er.','Dr','Prof',] 
    name=models.CharField('Authors Name',max_length=50) 
    dob=models.DateField('Birth Date',null=True) 
    addr=models.CharField('Address',max_length=100,null=True) 
    email=models.EmailField('Email',null=True) 
    salutation=models.CharField('Salutation',max_length=4) 
    headshot=models.ImageField(upload_to='authors/',null=True,blank=True) 

    def __str__(self): 
     return self.name 
class Publisher(models.Model): 
    name = models.CharField(max_length=30) 
    address = models.CharField(max_length=50) 
    city = models.CharField(max_length=60) 
    state_province = models.CharField(max_length=30) 
    country = models.CharField(max_length=50) 
    website = models.URLField() 
    def __str__(self): 
     return self.name 

class Book(models.Model): 
    title=models.CharField(max_length=100) 
    authors=models.ManyToManyField(Author) 
    publisher=models.ForeignKey(Publisher) 
    publication_date=models.DateField() 
    pages=models.IntegerField(blank=True,null=True) 
    price=models.FloatField() 
    cover=models.ImageField(upload_to='books/',null=True,blank=True) 

    def __str__(self): 
     return self.title 

的書,作者和出版商的對象將從Django的管理創建。對於每個創建並從作者列表中選擇作者的書籍對象,作者的書籍屬性應該自動更新,並附有該作者提供的書籍。即如果有作者命名爲Ram,Shyam,Hari,並且如果新作品是由作者Shyam和Hari創作的,另一個作品是Shyam和Ram創作的。要求是Shyam的書籍欄應該自動更新爲兩本書對象。 怎麼辦?

回答

0

你的模型是錯誤的,你不應該這樣做。

多對多的領域已經是雙向的。您應該只在一側定義字段本身;無論您選擇哪一個,Book或Author,但只選擇一個。隨着這種變化,當您將項目添加到關係的一側時,它會自動在另一側顯示。

+0

我明白了,我編輯了我的問題。 author.book_set.all()給出了所有的書集。謝謝 –