Django QuerySet:为什么我不能过滤带注释的 QuerySet?



我正在尝试检索数据库中最受欢迎的100本书的列表,然后创建该列表中唯一类别的列表。以下是我简化的图书、收藏和类别模型:

class Book(models.Model):
    name = models.CharField(max_length=100)
    category = models.ForeignKey(Category)
class Favorite(models.Model):
    user = models.ForeignKey(User)
    book = models.ForeignKey(Book)
class Category(models.Model):
    name = models.CharField(max_length=100)

我可以使用下面的查询轻松地获得100本最受欢迎的书的列表:

books =  Book.objects.annotate(num_favorites=Count('favorite')).order_by('-num_favorites')[:100]

但是当我试图获得100本最受欢迎的书的独特类别列表时,我开始遇到问题。下面的查询不工作(错误张贴在下面),我似乎不知道为什么。

>>> categories = Category.objects.filter(book__in=books).distinct()
>>> categories

FieldError: Cannot resolve keyword 'num_favorites' into field. Choices are: category, favorite, id, name

有谁能告诉我我错过了什么吗?

您可能在一个查询中堆积了太多内容。试着拆分它:

book_ids = (Book.objects.annotate(num_favorites=Count('favorite'))
    .order_by('-num_favorites')[:100].values_list('id', flat=True))
categories = Category.objects.filter(book__in=book_ids).distinct()

相关内容

  • 没有找到相关文章

最新更新