2017-06-17 67 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) 

希望这有助于

相关问题