有没有一种方法可以让你;平行;对于Django模板标记中的循环?

有没有一种方法可以让你;平行;对于Django模板标记中的循环?,django,Django,所以我有两个模型:问题和答案,如下所示: class Question(models.Model): number = models.IntegerField(primary_key=True) question = models.CharField(max_length = 100, blank=False, default="") 我想做的是显示所有的问题和每个对应的答案。像这样: 问题1。这是第一个问题 A1。这是该用户的第一个答案 问题2。这是第二个

所以我有两个模型:
问题
答案
,如下所示:

class Question(models.Model):
    number = models.IntegerField(primary_key=True)
    question = models.CharField(max_length = 100, blank=False, default="")
我想做的是显示所有的问题和每个对应的答案。像这样:

问题1。这是第一个问题
A1。这是该用户的第一个答案

问题2。这是第二个问题
A2。这是该用户的第二个答案。

等等
所以我的观点是这样的:

现在我被卡住了。
显然,我不能有两个嵌套的for循环,如下所示(simplied):

。。。
{问题中q的百分比%}
{答案%中的a为%1}
问题{{q.Question}
答复{{a.Answer}}
{%endfor%}
{%endfor%}
所以我想知道是否有一种方法可以在模板中对循环进行“并行”。我该怎么做<我非常感谢您事先的帮助。:)

并行循环(使用
zip
)也不能正常工作,因为没有任何东西可以保证问题的顺序,也不能保证每个问题只有一个答案

您可以改为只使用外键的名称–现在我正在使用它,您应该将
编号
外键重命名为
问题
,以使其有意义。(它指向的毕竟是一个问题,而不是一个数字。)

然而(通过评论修改),这在这里是无效的;最好只是收集用户的答案,并按问题分组显示。(以下代码假设
编号
问题

  • 注意:您不需要再次查找用户,也不需要按ID查询–按
    请求查询。用户
    对象即可
{q的百分比,问题的答案和答案。项目%}
问题{{q.Question}
{答案%中的a为%1}
答复{{a.Answer}}
{%endfor%}
{%endfor%}

哦,我遇到了一个问题。问题是,
Question
模型没有
authuser
字段,因为问题是由服务本身给出的,比如quick。因此,
Question.objects.filter(authuser=request.user)
部分将无法工作:(好的,所以没有错误,但我在屏幕上没有看到任何内容。因此我尝试
{{questions\u and\u answers}}
查看发生了什么,然后我得到了这个:
defaultdict(,{:[],:[我做到了。所以在
上下文的值部分
,我尝试了
dict(questions\u and\u answers)
而不是
questions\u and\u answers
,然后一切都很好。非常感谢:)
class Answer(models.Model):
    authuser = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    number = models.ForeignKey(Question, on_delete=models.CASCADE, null=True)
    answer = models.CharField(max_length = 100, blank = False, default="")
def questionsAndAnswers(request):
    thisUser = User.objects.get(authuser_id=request.user.id)
    answers = Answer.objects.filter(authuser_id=request.user.id)  
    questions = Question.objects.filter(authuser_id=request.user.id)

    context = {
        'thisUser' : thisUser,
        'answers': answers,
        'questions' : questions,
    }
    return render(request, 'main.html', context)
...
{% for q in questions %}
{% for a in answers %}
<div>Question : {{q.question}}</div>
<div>Answer : {{a.answer}}</div>
{% endfor %}
{% endfor %}
from collections import defaultdict
def questionsAndAnswers(request):
    user_answers = Answer.objects.filter(authuser=request.user).prefetch_related('question')
    questions_and_answers = defaultdict(list)
    for answer in user_answers:
       questions_and_answers[answer.question].append(answer)

    context = {
        'questions_and_answers' : questions_and_answers,
    }
    return render(request, 'main.html', context)
{% for q, answers in questions_and_answers.items %}
  <div>Question : {{q.question}}</div>
  {% for a in answers %}
     <div>Answer : {{a.answer}}</div>
  {% endfor %}
{% endfor %}