Как передать данные из нескольких чекбоксов, созданных в шаблоне django с помощью цикла for, в файл views.py без использования форм

Это моя html форма, в которой у меня есть текстовое поле для слова, и я запускаю цикл for, который создает флажок для списка документов пользователя и отображает его как форму.

<body>
<form id="form" method = "POST">
    {% csrf_token %}
    <fieldset id="User">
    <legend>Your details:</legend>
        <p><label for="word">Enter your word</label>
            <input type="text" id="word" name="word">
        </p>
        {% for doc in docs %}
        <p>
            <input type="checkbox" id="{{ doc.document_id }}" name="docid" value="{{ doc.path }}">
            <label for="{{ doc.document_id }}"> {{ doc.document_name }} </label><br>
        </p>
        {% endfor%}
        <input type="submit" value="Submit" >
</fieldset>
</form>
</body>

В views.py у меня есть метод, который загружает эту html-страницу

def client_home(request):
    client_pr = Client_Profile.objects.get(user_id=request.user)
    events = Event.objects.filter(client_id=client_pr.pk)
    name = request.POST.get('word')
    id = request.POST.get('docid')
    print(name)
    print(id)
    docs = []
    for eve in events:
        docs = Document.objects.filter(event_id=eve)
    context = {'events': events, 'docs': docs}
    return render(request, 'Elasticsearch/form.html', context)

Мой вопрос заключается в том, что я использую цикл for для создания поля флажка на основе количества документов у пользователя, и когда я пытаюсь распечатать их в моем Views.py файле, он печатает только идентификатор последнего документа, чей флажок был создан, а не все документы.

Посмотрев ваше представление, я предположил, что вы хотите передать в шаблон список документов, специфичных для пользователя. В настоящее время вы перезаписываете docs в каждой итерации цикла for.

Change

docs = Document.objects.filter(event_id=eve)

to

docs += Document.objects.filter(event_id=eve)

Вам нужно использовать getlist для получения всех выбранных значений из вашего чекбокса, так:

id_list = request.POST.getlist('docid')

Иначе при использовании get будет возвращена только последняя.

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