2017-06-17 68 views
1

我有一個Training modell和一個Drill模型,它們之間有一個ManyToMany關係。我遇到的問題是Django在默認情況下強制唯一性,並且不可能在相同的Training上有重複的Drill。Django Rest Framework與ManyToMany字段一起使用

爲了解決這個問題,我可以在設置ManyToMany關係時使用through=參數,但這會導致Django Rest Framework出現很多問題。

有沒有其他方法可以做到這一點?我是否必須創建through=模型纔不強制實現我的M2M關係的唯一性?

我與DRF所遇到的問題是,我還需要爲已創建的新模型創建中間串行器。當我想發送Drill數據時,這會導致問題,因爲它會驗證它並刪除所有Drill數據,因爲由於需要自定義序列化程序,因此它期待TrainingDrill(中間模型)。

這個小小的變化真的很快就需要大量額外的變化。一定會有更好的辦法。

回答

0

要回答關於通過模型你的問題:

通過模型通常用於進一步的信息添加到許多一對多的關係(例如,如果你需要添加某種順序或日期的關係已經形成,等等,我相信你會明白)。

不要通過=使用實現唯一性:

在問候走這路線,避開獨特性,我不認爲這是考慮這個問題的正確途徑。基於Django自己的例子here 你會看到,你可以多次添加相同的情況下,以一個M2M關係:

>>> a2 = Article(headline='NASA uses Python') 
>>> a2.save() 
>>> a2.publications.add(p1, p2) 
>>> a2.publications.add(p3) 
Adding a second time is OK: 
>>> a2.publications.add(p3) 

的許多一對多的關係可以在任何一方定投(通常不是兩者) ,這裏的做這件事的一種方法:

class Drill(models.Model): 
    training = models.ManyToManyField(Training) 
    anotherfield = models.CharField('some other field description', max_length = 128) 

class Training(models.Model) 
    yetAnotherField = models.CharField('yet another field description', max_length = 128) 

希望這有助於

相關問題