0

我正在尝试创建一个包含 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:m2m 字段“free_options”的访问器与相关的 m2m 字段“Option.+”冲突。在“free_options”的定义中添加一个related_name 参数。camps.camp:m2m 字段“free_options”的反向查询名称与相关的 m2m 字段“Option.+”冲突。在“free_options”的定义中添加一个related_name 参数。

在同一个模型上不可能有2个没有反向关系的字段吗?我怎样才能解决这个问题?

谢谢!

4

2 回答 2

0

根据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 的反向关系。

希望这可以帮助!

于 2013-02-06T20:09:28.440 回答
0

我会问你为什么对向后关系感到困扰,如果你不想要它就不要使用它。但是要回答这个问题,没有办法完全删除它。

于 2012-07-08T13:09:43.440 回答