英文:
related_name parameter name conflict in django?
问题
我有一个关于“related_name”参数的查询(用于在模型之间建立关系时使用)。
假设我分配了值related_name = "x",那么:
-
它将给定的值设置为反向关系管理器的名称
例如 - parent_model_object.x.all() -
它将给定的名称设置为父模型在过滤对象时使用的名称。
例如 - 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,
-
it sets the given value to reverse relation manager name
ex- parent_model_object.x.all() -
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(…)</code> <sup>[Django-doc]</sup> by the way does not work with the <code>related_name=…</code> <sup>[Django-doc]</sup>, but with the <code>related_query_name=…</code> <sup>[Django-doc]</sup>. If no <code>related_query_name=…</code> is set, it will default to the <code>related_name=…</code>, and if that is missing too, to the model name in lowercase. This is different from <code>related_name=…</code> itself, which defaults to the <code><i>modelname</i>_set</code> with modelname
the name of the model in lowercase.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论