related_name
将成为相关对象的属性,容许您使用外键对模型进行“倒退”。例如,若是ModelA
有像下面这样的字段,那么model_b = ForeignKeyField(ModelB, related_name='model_as')
这将使您可以经过去访问ModelA
与您的ModelB
实例相关的实例model_b_instance.model_as.all()
。请注意,这一般是用复数形式编写的外键,由于外键是一对多关系,而且该等式的许多方面是具备在其上声明的外键字段的模型。post
文档中进一步的解释是有帮助的。https://docs.djangoproject.com/en/1.10/topics/db/queries/#backwards-related-objectsspa
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_name
和related_query_name
。Django具备合理的默认值。code
# 统计出每一个出版社买的最便宜的书的价格ret=models.Publisher.objects.first().book_set.all()ret=models.Publisher.objects.get(id=1).books.all()book_set能够用books代替related_name用在get上ret=models.Publisher.objects.filter().annotate(c=Min('zhangzhao__price')).values('name','zhangzhao__title','c')print(ret)book_set能够用books代替related_query_name用在filter上