繁体   English   中英

Django 中“related_name”和“related_query_name”属性之间的区别?

[英]Difference between 'related_name' and 'related_query_name' attributes in Django?

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

related_name将是相关对象的属性,它允许您“向后”到带有外键的模型。 例如,如果ModelA具有像场: model_b = ForeignKeyField(ModelB, related_name='model_as')这将使您能够访问ModelA这是与您的实例ModelB通过去实例model_b_instance.model_as.all() 请注意,这通常用复数表示外键,因为外键是一对多的关系,该等式的多方面是在其上声明外键字段的模型。

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

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

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

class Album(models.Model):
    artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)

这里外键前向关系是专辑到音乐家,后向关系是音乐家到专辑。 这意味着一个专辑实例只能与一个音乐家实例关联(前向关系),一个音乐家实例可以关联多个专辑实例(向后关联)。
前向查询会是这样的

Album_instance.artist

请注意此处由 Album_instance 后跟艺术家(字段名称)完成的前向查询。 和落后将是

Musician_instance.album_set.all() 

此处用于向后查询 modelname_set 。

现在,如果您指定相关名称,如artist = models.ForeignKey(Musician, on_delete=models.CASCADE, related_name='back')

然后向后查询语法将更改 modelname_set(artist.set) 将替换为 back。 现在向后查询

Musician_instance.back.all()

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

和 related_query_name 用于来自目标模型的反向过滤器名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM