假设我的模特:
model book
charfield name
model review
charfield bookname
有没有办法过滤/排除评论数为零的图书?我仔细查看了stackoverflow,但无法找到答案。这不是一个家庭作业问题。我有一个查询集约。大小约为200,000,我从中得出结论,通过将查询集转换为python列表进行过滤是不明智的,过滤,然后转换回来。有人可以帮我弄这个吗? 感谢
答案 0 :(得分:2)
因为我强烈建议您更改模型以包含从评论到预订的外键(为了实现此目的的许多其他好处),而不是尝试解决您所询问的确切问题,我会给您提示如何使用外键编写模型,然后如何解决在外键关系的上下文中询问的问题。
以下是我认为你应该写的新模型:
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()
答案 1 :(得分:1)
首先,您可以查询有评论的图书列表,然后使用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)