我想使用复选框从列表中获取多个id。我得到了一个错误
字段'id'期望得到一个数字,但得到了[].
下面是我的代码。
sample . html
<button href="/sample/save">Save</button>
{% for obj in queryset %}
<tr>
<td><input type="checkbox" name="sid" value="{{obj.id}}"></td>
<td>{{ obj.sample_name }}</td>
<td>{{ obj.sample_type}}</td>
<td>{{ obj.number}}</td>
</tr>
{% endfor %}
views.py
def sample(request):
if request.method == 'GET':
queryset = SampleList.objects.all()
return render(request, 'lab_management/sample.html', {'queryset': queryset})
def save_doc(request):
sid = request.POST.getlist('sid')
sample = SampleList.objects.filter(id=sid)[0:10]
template = DocxTemplate("doc.docx")
context = {
'headers' : ['Name', 'Type', 'Number'],
'doc': [],
}
for samp in sample:
list = [samp.name, samp.type, samp.number]
context['doc'].append(list)
template.render(context)
template.save('new_doc.docx')
字段id应该是int你传递了一个列表,这就是为什么你得到错误:
字段'id'期望得到一个数字,但得到了[].
这里可以使用in - field查找
试试这个
sample = SampleList.objects.filter(id__in=sid)[0:10]
这将显示所有id在sid
SampleList
项。
更新将上下文改为
context = {
'headers' : ['Name', 'Type', 'Number'],
'doc': sample,
}
然后删除这个for循环
# for samp in sample:
# list = [samp.name, samp.type, samp.number]
# context['doc'].append(list)
和模板
{% for obj in doc %}
<tr>
<td><input type="checkbox" name="sid" value="{{obj.id}}"></td>
<td>{{ obj.name }}</td>
<td>{{ obj.type}}</td>
<td>{{ obj.number}}</td>
</tr>
{% endfor %}
注:假设名称、类型、编号为SampleList
型号的字段名