Python:从复选框获取多个 id



我想使用复选框从列表中获取多个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型号的字段名

最新更新