【发布时间】:2012-12-27 00:54:33
【问题描述】:
假设这些是 django 模型:
class Question():
question = charfield()
choice = charfield(choices = answer_choice)
class Answer():
question = models.foreignkey(Question, related_name = 'answers')
answerer = models.foreignkey('auth.User')
answer = models.charfield()
我正在构建一个页面,其中显示 100 个问题,每个 User 可以回答,但不能更改每个问题的答案。对于每个问题,我必须检查User 是否已经存在于Answerer 上。然后我制作模板标签:
@register.filter
def this_user_exists(user,obj):
obj = obj.answers.filter(answerer_id = user.id)
返回对象
然后在模板上:
# obj is list of question
{% if not user|this_user_exists:obj %}
# can answer
{% else %}
# cannot answer
{% endif %}
问题是,对于每个问题,它会生成 1 个查询,因此对于 100 个问题,它将生成 100 个查询。我试过这个查询来生成问题Question.objects.all() 和Question.objects.prefetch_related('answers'),仍然有问题。有没有更好的方法来实现这一点而无需进行太多查询?
【问题讨论】: