好的,我有两个模型,“问题”和“答案”。当然,答案有外键“user”和“question”。所有民意调查的名单工作得很好,但现在我试图通过两个名单内的民意调查:“回答”和“未回答”,这样我就可以在两个表中列出民意调查,用户就可以看到他剩下的民意调查了。
基本上,我使用了一个简单的for循环,它只正确传递回答的问题,而不会传递未回答的问题。我很想知道为什么,也许我可以用不同的方式来处理它。
以下是我所做的:
def polls_view(request):
polls = polls.objects.all()
answers = answers.objects.filter(user=request.user)
answered = []
unanswered =[]
for answer in answers:
if answer.poll in polls:
answered.append(answer.poll)
for poll in polls:
if poll not in answered:
unanswered.append(poll)
字符串
另外,添加print(answered)和print(unanswered)可以在两个列表中显示轮询类型对象的列表,并且“answered”在django模板中完美地工作,但unanswered不在那里:
{% if not unanswered %}
test
{% endif %}
型
渲染时显示“test”。
1条答案
按热度按时间dbf7pr2w1#
假设Answer模型与poll有关系,你可以通过Poll来思考答案为“answered”:
字符串
在这段代码中,我们使用Django的annotate()函数为每个投票添加一个新的“字段”,该字段是当前用户相关答案的计数。然后,我们将投票过滤为两个独立的查询集:已回答包含具有一个或多个相关答案的轮询,而未回答包含没有相关答案的轮询。看看Django的聚合函数会很好:https://docs.djangoproject.com/en/4.2/topics/db/aggregation/
有人注意到:
answered
和unanswered
是查询集而不是列表,但是如果你想使用list(aswered)
,你可以将其作为列表来评估。1.每个
Poll
模型对象将有一个额外的num_answers
字段。1.上面的代码使用了
answer_set
。如果您已经更改了外键中的相关名称,则需要相应地进行调整。