Django 中的 related_name 参数名称冲突?

huangapple go评论73阅读模式
英文:

related_name parameter name conflict in django?

问题

我有一个关于“related_name”参数的查询(用于在模型之间建立关系时使用)。

假设我分配了值related_name = "x",那么:

  1. 它将给定的值设置为反向关系管理器的名称
    例如 - parent_model_object.x.all()

  2. 它将给定的名称设置为父模型在过滤对象时使用的名称。
    例如 - child_model.objects.filter(x__name = "manav")

那么是否存在名称冲突的可能性?(因为模型类和反向关系管理器都被分配了相同的名称)

英文:

i have a query regarding "related_name" parameter (used while establishing a relationship between models)

suppose i assign the value to related_name= "x"

then,

  1. it sets the given value to reverse relation manager name
    ex- parent_model_object.x.all()

  2. it sets given name to parent model while filtering objects.
    ex - child_model.objects.filter(x__name = "manav")

so is there any chances of name conflict ? (as same name is assigned to model_class and reverse relation manager )

答案1

得分: 0

没有:Django会进行检查。它会尝试以相反的方式添加名称,如果存在冲突,将会打印错误信息。

另外,.filter(...) 不与 related_name 一起使用,而是与 related_query_name 一起使用。如果没有设置 related_query_name,它将默认为 related_name,如果 related_name 也不存在,则默认为模型名称的小写形式。这与 related_name 本身不同,后者默认为 modelname 的小写形式后加上 _set,其中 modelname 是模型的名称。

英文:

> so is there any chances of name conflict?

No: Django checks this. It will try to add the name in reverse, and it will print an error in case there is.

The <code>.filter(&hellip;)</code>&nbsp;<sup>[Django-doc]</sup> by the way does not work with the <code>related_name=&hellip;</code>&nbsp;<sup>[Django-doc]</sup>, but with the <code>related_query_name=&hellip;</code>&nbsp;<sup>[Django-doc]</sup>. If no <code>related_query_name=&hellip;</code> is set, it will default to the <code>related_name=&hellip;</code>, and if that is missing too, to the model name in lowercase. This is different from <code>related_name=&hellip;</code> itself, which defaults to the <code><i>modelname</i>_set</code> with modelname the name of the model in lowercase.

huangapple
  • 本文由 发表于 2023年7月17日 23:52:26
  • 转载请务必保留本文链接:https://go.coder-hub.com/76706184.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定