【问题标题】:Django - use of related_name '+'?Django - 使用相关名称'+'?
【发布时间】:2013-10-24 02:20:21
【问题描述】:

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

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

【问题讨论】:

  • 当您不想创建后向关系时。
  • 如果我有一个向后的关系,我可以方便地访问相关的对象。为什么不使用它?我的意思是“+”还有其他用途。
  • 这是唯一的目的。

标签: python django


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    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 会拒绝启动。鉴于在这种情况下您实际上并不需要,因此跳过它是有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2019-01-29
      • 2012-10-19
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多