作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检索数据库中 100 种最受欢迎的书籍的列表,然后创建该列表中的唯一类别的列表。以下是我简化的 Book、Favorite 和 Category 模型:
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()
关于mysql - Django 查询集 : Why can't I filter an annotated QuerySet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061609/
我是一名优秀的程序员,十分优秀!