假设这些是 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) return obj
然后在模板上:
# 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')
但仍然有问题。有没有更好的方法来实现这一点而无需进行太多查询?