【发布时间】:2020-05-28 08:21:08
【问题描述】:
所以,我想将选中的复选框项目 id 作为列表并将它们显示在另一个页面上。但是当我到达那个特定页面时,我得到的值是“无”而不是 id 列表。会出什么问题?我尝试了一些与网站上已经发布的其他问题不同的版本,但结果是一样的。
代码如下:
- models.py:
from django.db import models
class afirmatii(models.Model):
text = models.CharField(max_length = 250)
def __str__(self):
return self.text
- views.py:
def exam(request):
if request.method == 'POST':
checks = request.POST.get('selected[]')
request.session['checks2'] = checks
context = {
'title' : 'Title1',
'aff': afirmatii.objects.order_by('id')
}
return render(request, 'pages/exam.html', context)
def result(request):
checks = request.session.get('checks2')
context = {
'title' : 'Title2',
'checks': checks
}
return render(request, 'pages/result.html', context)
- exam.html:
{% extends "./base.html" %}
{% block content %}
<div class="text-break">
<form action="{% url 'result' %}" method="POST">
{% csrf_token %}
{% for q in aff %}
<div class="border mb-3 rounded-sm bg-light p-2">
<div class="custom-control custom-checkbox checkbox-info">
<input type="checkbox" class="custom-control-input" id="{{ q.id }}" name = "selected[]">
<label class="custom-control-label" for="{{ q.id }}" name = 'selected[]'> {{ q.text }} </label>
</div>
</div>
{% endfor %}
<button type="submit" class="btn btn-md btn-outline-info">Next</button>
</form>
</div>
{% endblock content %}
- result.html:
{% extends "./base.html" %}
{% block content %}
<body>
<div class="text-center">
<p class="pb-5"> {{ checks }} </p><br>
<div class="row">
<div class="col">
<a href="{% url 'home' %}" class="btn btn-md btn-outline-info" type="button">Home</a>
</div>
<div class="col">
<a href="{% url 'home' %}" class="btn btn-md btn-outline-info" type="button">Learn more</a>
</div>
</div>
</div>
</body>
{% endblock content %}
【问题讨论】:
-
<input type="checkbox" ... name = "selected[]">提交表单时,所有的复选框都将命名为selected[],您的代码将无法区分它们。 -
@JohnGordon 所以这意味着我必须一个接一个地写?
-
大概你可以使用一些循环元素为每个复选框构建唯一的名称。
-
@SebastianTutuianu 先调用哪个视图?