为什么你不想在外键上创建向后关系?

时间:2017-02-23 15:50:31

标签: django django-models

我最近在related_name字段的ForeignKey属性的Django文档中遇到this paragraph

  

如果您不希望Django不创建向后关系,请将related_name设置为'+'或以'+'结束。例如,这将确保User模型与此模型不具有向后关系:

user = models.ForeignKey(
    User,
    on_delete=models.CASCADE,
    related_name='+',
)

您希望在什么情况下这样做?

1 个答案:

答案 0 :(得分:2)

我还记得那时也很困惑。然而,在我发现自己偶尔这样做的那些年里。如果你知道你永远不需要相关的经理,那么告诉Django不要创建它有一些小优点。

  1. 它用作您未使用该关系的文档。这可能对未来的读者有所帮助。这是我做这件事的主要原因,在未来对我自己或其他人说:“这个设计没有想到使用这种关系,所以如果你认为你需要它,就停下来思考它。”

  2. 它避免了混乱目标实例的命名空间。有些人关心这一点。

  3. 它避免了创建不需要的管理器的开销,理论上应该提高性能。在没有任何基准的情况下,我预计任何此类改进都会非常小。

  4. 换句话说,正常的良好编码习惯是不添加您不需要的代码。此选项允许您阻止Django添加您不需要的代码。

    现在,我仍然不知道你为什么要“用+结束它”而不只是使用“+”!