两个ManyToMany字段没有向后关系

时间:2012-07-08 11:33:27

标签: python django django-models

我正在尝试使用2个ManyToMany字段的模型,而不允许向后关系。 所以这是模型:

class Camp(models.Model):
#...

free_options = models.ManyToManyField('Option', related_name='+')
paid_options = models.ManyToManyField('Option', related_name='+')

尝试后

  

python manage.py syncdb

我收到以下错误:

  

错误:一个或多个模型未验证:camps.camp:Accessor for   m2m字段'free_options'与相关的m2m字段'选项。+'发生冲突。   将related_name参数添加到'free_options'的定义中。   camps.camp:m2m字段'free_options'冲突的反向查询名称   与相关的m2m字段'选项。+'。添加一个related_name参数   'free_o ptions'的定义。

在同一型号上是否不可能有2个没有向后关系的字段?我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

我会问为什么你会因为有向后的关系而烦恼,如果你不想要它就不要使用它。但要回答这个问题,没有办法完全删除它。

答案 1 :(得分:0)

根据related_name argument of the ManyToManyField的Django文档:

  

如果您有多个指向同一模型的ManyToManyField   并且想要抑制向后关系,将每个related_name设置为   以<+'

结尾的唯一

强调我的。

因此,如果你想这样做,你应该能够简单地:

class Camp(models.Model):
    #...

    free_options = models.ManyToManyField('Option', related_name='free_options+')
    paid_options = models.ManyToManyField('Option', related_name='paid_options+')
    #                                                             ^^^^^^^^^^^^

在同一模型中抑制多个ManyToManyField的向后关系。

希望这有帮助!