Python: Получение нескольких идентификаторов из флажка
Я хотел получить несколько идентификаторов из списка с помощью checkbox. Получил ошибку
Поле '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' ожидало число, но получило [].
Здесь вы можете использовать в Filed lookup
Попробуйте это
sample = SampleList.objects.filter(id__in=sid)[0:10]
это покажет все элементы SampleList
с идентификаторами в sid
Update
Измените свой контекст на
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 %}
NB: предполагая, что имя, тип и номер являются именами файлов SampleList
модели