Django(6)

为什么不用_set

related_name和related_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/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_nameDjango具有合理的默认值。


# 统计出每个出版社买的最便宜的书的价格
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上
原文地址:https://www.cnblogs.com/shanjinghao/p/9207824.html