[英]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.