繁体   English   中英

django过滤查询集基于另一个查询集的计数

[英]django filter queryset based on count of another queryset

假设我的模特:

model book 
    charfield name

model review
    charfield bookname

有没有办法过滤/排除评论数为零的书籍? 我在stackoverflow上仔细查看了这个,但找不到答案。 这不是一个家庭作业问题。 我有一个查询集约。 大小约为200,000,我从中得出结论,通过将查询集转换为python列表进行过滤是不明智的,过滤,然后转换回来。 有人可以帮我弄这个吗? 谢谢

因为我强烈建议您更改模型以包括从评论到预订的外键(为了实现这一目的的许多其他好处),而不是试图解决您所询问的确切问题,我将给您一个提示如何使用外键编写模型,然后如何解决在外键关系的上下文中询问的问题。

以下是我认为你应该写的新模型:

from django.db import models

class Book(models.Model):
    name = models.Charfield()

class Review(models.Model):
    book = models.ForeignKey(Book, related_name='reviews')

然后,过滤所有可以进行任何评论的书籍:

books_with_reviews = Book.objects.filter(reviews__isnull=False).distinct()

或者对于没有评论的书籍:

Book.objects.filter(reviews__isnull=True).distinct()

首先,您可以查询具有评论的书籍列表,然后使用django exclude获得赞美

bookname_has_review = Review.objects.all().distinct().values_list('bookname', flat=True)
book_not_have_review = Book.objects.all().exclude(name__in=bookname_has_review)

暂无
暂无

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

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