总结一下,我的数据库结构是这样的:test |_ question |_ choice |_ choice |_ choice |_ question |_ choice |_ choice |_ choice现在我想在一个页面上显示每个问题的所有选择。我的views.py:def index(request): data = { 'greeting': 'Welcome User!', 'form_test': forms.TestForm, 'form_question': forms.QuestionForm, 'form_choice': forms.ChoiceForm, 'test': models.Test.objects.get(pk=1), 'questions': models.Question.objects.filter(test_id__exact=1), } questions = models.Question.objects.filter(test_id=1) for question in questions: data['choices_{}'.format(question.id)] = models.Choice.objects.filter(question_id=question.id) print(data) return render(request, 'et_app/index.html', context=data)所以从技术上来说,如果我有两个问题,我的data问题会是这样的:{...'choices_1': ...'choices_2': ......}现在,我的问题是choices在模板上显示这些。我试过:{% for question in questions %} <h4>Q: {{ question.content }}</h4> <p>Choices:</p> <ul class="list-group"> {% for choice in 'choices_{}'.format(question.id) %} <li class="list-group-item">{{ choice.content }}</li> {% endfor %} </ul>{% endfor %}它只是破坏了整个事情。我对 Django 比较陌生,所以请原谅我的天真。我怎样才能解决这个问题?多谢!
1 回答
萧十郎
TA贡献1815条经验 获得超13个赞
您不需要首先手动构建选择上下文变量(部分data['choices_{}'.format(question.id)])。
您只需要在模板中执行以下操作:
{% for question in questions %}
<h4>Q: {{ question.content }}</h4>
<p>Choices:</p>
<ul class="list-group">
{% for choice in question.choice_set.all %}
<li class="list-group-item">{{ choice.content }}</li>
{% endfor %}
</ul>
{% endfor %}
关键部分是question.choice_set.all;Django 自动构建反向关系访问器。
添加回答
举报
0/150
提交
取消
