Django - 使用related_name '+'?

zha*_*han 9 python django

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

例如,这将确保用户模式不会有倒退与此相关的模型:user = models.ForeignKey(User, related_name='+')。我什么时候应该使用“+” related_name

Mar*_*arc 11

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

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

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


Dan*_*inn 7

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

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()
Run Code Online (Sandbox Code Playgroud)

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