【发布时间】:2014-01-18 01:59:58
【问题描述】:
考虑两个模型:
class Question(models.Model):
...
class Answer(models.Model):
question = models.ForeignKey(Question)
...
目标是按问题对答案进行分组。我可以想到一些从Question 方面跨越模型关系的方法 - 检索所有有答案的问题:
Question.objects.annotate(answer_count = Count('answer')) \
.filter(answer_count__gte=1)
然后我们可以遍历这个 QuerySet 并使用answer_set 来获得特定的答案。
这里的问题是,如果Question 表足够大,那么这个查询非常慢。在大多数问题都没有任何答案并且您最终用零注释一个巨大的表格的情况下,这更加难看。
如果从关系的另一端出发,并以某种方式将 Answer 实例按 question__id 字段分组,那就太好了。我现在的处理方式是:
answered_questions = [row['question'] for row in
Answer.objects.values('question').distinct('question')]
for question in answered_questions:
answers = Answer.objects.filter(question__id=question)
这显然更快但也很笨拙。按外键对对象进行分组应该是一项非常常见的任务。有没有更好的方法?
【问题讨论】:
标签: django django-models foreign-keys django-queryset