12

在 Django1.5 文档中,有一节关于related_name. 最后一段是“如果您不希望 Django 创建反向关系,请将其设置related_name为 '+' 或以 '+' 结尾。

例如,这将确保 User 模型不会与此模型有反向关系:user = models.ForeignKey(User, related_name='+'). 我什么时候应该使用“+” related_name

4

2 回答 2

12

来自Django docs,一个禁止反向关系的工具,他们的话:

如果您不希望 Django 创建反向关系,请将related_name 设置为“+”或以“+”结尾。

以上答案是正确的,但我想让答案对其他人更加清楚。

于 2019-09-24T18:17:38.173 回答
11

也许在创建反向关系时会引起冲突。考虑您有一个抽象模型和所述模型的两个子类的情况:

class MyAbstractModel(models.Model):

    class Meta(object):
        abstract = True

    book = models.ForeignKey(Books, related_name="+")

class MyThing(MyAbstractModel):
    name = models.CharField(max_length=128)

class MyOtherThing(MyAbstractModel):
    number = models.PositiveIntegerField()

如果不使用"+",您会遇到命名冲突,并且 Django 会拒绝启动。鉴于在这种情况下您实际上并不需要它,因此跳过它是有意义的。

于 2017-01-19T16:51:33.493 回答