Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与x27之间的差异;相关的#u名称';和';相关的查询名称';Django中的属性?_Python_Django_Django Models - Fatal编程技术网

Python 与x27之间的差异;相关的#u名称';和';相关的查询名称';Django中的属性?

Python 与x27之间的差异;相关的#u名称';和';相关的查询名称';Django中的属性?,python,django,django-models,Python,Django,Django Models,您能解释一下Django中字段对象的相关名称和相关查询名称属性之间的区别吗?当我使用它们时,如何使用它们?谢谢 related\u name将是相关对象的属性,允许您“向后”转到带有外键的模型。例如,如果ModelA有如下字段:model\u b=ForeignKeyField(ModelB,related\u name='model\u as'),这将使您能够访问与ModelB实例相关的ModelA实例,方法是转到model\u\u instance.model\u as.all()。请注意,

您能解释一下Django中字段对象的
相关名称
相关查询名称
属性之间的区别吗?当我使用它们时,如何使用它们?谢谢

related\u name
将是相关对象的属性,允许您“向后”转到带有外键的模型。例如,如果
ModelA
有如下字段:
model\u b=ForeignKeyField(ModelB,related\u name='model\u as')
,这将使您能够访问与
ModelB
实例相关的
ModelA
实例,方法是转到
model\u\u instance.model\u as.all()
。请注意,这通常是用复数形式表示外键的,因为外键是一对多关系,并且该等式的多面是声明了外键字段的模型

文档中链接的进一步解释很有帮助

related\u query\u name
用于Django查询集。它允许您过滤外键相关字段的反向关系。继续我们的示例-在
模型a上有一个字段,如:
model\u b=ForeignKeyField(ModelB,related\u query\u name='model\u a')
允许您在查询集中使用
model\u a
作为查找参数,例如:
ModelB.objects.filter(model\u a=where)
。对于
相关的\u查询\u名称
,通常使用单数形式。正如文档所说,不需要同时指定(或其中一个)
相关的\u名称
相关的\u查询\u名称
。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_实例完成的查询,后跟艺术家(字段名)。而落后就是

Musician_instance.album_set.all() 
此处使用modelname\u set进行反向查询

现在,如果指定相关的名称,如

艺人=模特。外键(音乐家,在_delete=models.CASCADE上,相关的_name='back')

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

Musician_instance.back.all()
如果您不希望Django创建向后关系,请将related_name设置为“+”或以“+”结尾


以及用于目标模型的反向过滤器名称的相关查询名称

非常感谢,无需担心。如果这解决了您的问题,您介意接受答案吗?
related\u query\u name默认为related\u name或default\u related\u name的值(如果已设置),否则默认为模型的名称
完美解释。竖起大拇指(y)@JayVasant有一个区别,而且定义明确。您看到的是@Windsooon在评论中解释的行为:
related\u query\u name
默认值为
related\u name