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 модели

Вернуться на верх