Django中'related_name'和'related_query_name'属性的区别?

Hùn*_* Vi 19 python django django-models

你能解释Django中Field对象related_namerelated_query_name属性之间的区别吗?当我使用它们时,如何使用它们?谢谢!

Chi*_*idG 40

related_name将是相关对象的属性,允许您使用外键向后"返回"模型.例如,如果ModelA有一个像:model_b = ForeignKeyField(ModelB, related_name='model_as')这样的字段,这将使您能够通过访问来访问ModelA与您的ModelB实例相关的实例model_b_instance.model_as.all().注意,对于外键,这通常用复数形式写,因为外键是一对多关系,并且该等式的许多方面是在其上声明了外键字段的模型.

在文档中链接的进一步解释是有帮助的.https://docs.djangoproject.com/en/1.10/topics/db/queries/#backwards-related-objects

related_query_name用于Django查询集.它允许您过滤外键相关字段的反向关系.继续我们的示例 - 使用类似的字段Model A: model_b = ForeignKeyField(ModelB, related_query_name='model_a')将使您能够model_a在查询集中用作查找参数,如:ModelB.objects.filter(model_a=whatever).使用单数形式更为常见related_query_name.正如文档所说,没有必要指定两者(或任何一个)related_namerelated_query_name.Django有明智的默认值.

  • 如果设置,`related_query_name默认为related_name或default_related_name的值,否则默认为模型的名称 (5认同)
  • 不用担心。如果这解决了您的问题,您介意接受答案吗? (2认同)
  • @JayVasant 有一个区别,并且定义很明确。您所看到的是@Windsooon 的评论中解释的行为:“lated_query_name”默认为“lated_name”的值。 (2认同)