Django查询带注释并选择相关的一起
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django查询带注释并选择相关的一起相关的知识,希望对你有一定的参考价值。
我试图谷歌解决这个简单的案例是不成功的:
有书和作者模型。我可以有几本相同的书(有不同的ID)。作者是Book中的外键。
我需要简单的方法来列出所有书籍,他们的计数和作者姓名。
我可以:
Book.objects.values("book_name","author").annotate(count=Count("book_name")
这给了我一个数组,其中aditional值与“book_name”项的计数。但它不是作者名称,而只返回作者对象id。
我可以使用作者姓名
Book.objects.select_related()
这取代了作者的ID与相关对象,所以我可以得到author.name,但它不适用于.values()
知道如何让这个合作吗?所以我可以同时计算每本书和作者姓名?
我想避免复杂的解决方案,比如查询Books,以及结果数组的循环结构和查询每本书的作者名称。
非常感谢。 TC
答案
select_related
在这里是一个红鲱鱼;它永远不需要访问相关模型的元素,它所做的就是提高效率。
与所有其他类型的查询一样,要访问相关元素,您只需使用双下划线语法。假设您的作者模型有一个name
字段:
Book.objects.values("book_name","author__name").annotate(count=Count("book_name")
注意,我发现很难理解你的查询是什么;书名的数量应该是多少?我怀疑你真正想要的是一个作者姓名列表和他们的书籍计数,在这种情况下你应该从作者而不是书开始。)
以上是关于Django查询带注释并选择相关的一起的主要内容,如果未能解决你的问题,请参考以下文章