Ручной доступ к содержимому из полей формы в Django

Я нахожусь в ситуации, когда я хотел бы отправить содержимое в форму, которая не определена в классе Forms.

Например, в моем forms.py:

class AnalyseForm(forms.Form):
    TYPES = (('a', 'Type A'),('b', 'Type B'), ('c', 'Type C'))

    filename = forms.FileField(label="Document to Aalyse")
    doctype = forms.ChoiceField(choices=TYPES, label="Doc Type:")

и в моем views.py:

Я пытаюсь отправить дополнительную переменную, которой нет в классе Form, потому что я определил ее в HTML-файле вручную. Ответ на этот вопрос заключается не в том, чтобы определить ее в классе Form. У меня есть, например, другие HTML-виджеты, с которыми можно поиграть, включив их в определение формы Django.

def AnalyseDoc(request):
    doctype=""
    if request.method == "POST":
        form = AnalyseForm(request.POST, request.FILES)
        if form.is_valid():
            filecontent = request.FILES['filename']
            doctype=form.cleaned_data['doctype']
            # dummydata=form.cleaned_data['dummydata']
            print(dummydata)
            analyse = analyseStuff(file=filecontent,doctype=doctype, dummydata=dummydata)
    else:
        form = AnalyseForm()

    return render(
                    request, 
                    "summary.html", 
                    {
                        "dummydata": "x",
                        "form": form,
                        'filecontent': filecontent,
                        "doctype": doctype,
                    },
                )

Это несколько затруднительно

    <h1>What file would you like to Analyse?</h1>
    <form action = "" method = "post" enctype="multipart/form-data">
        <div class="form-check form-switch">
            <label class="form-check-label" for="dummydata">Use Dummy Data</label>                    
            <input class="form-check-input" type="checkbox" role="switch" id="dummydata" checked>
        </div>
            {% csrf_token %}
        {{form | crispy}}
        <button id="submit" type="submit" class="btn btn-primary">Analyse<button>
    </form>  

Это затруднительное положение. Как тогда мне получить доступ к значению 'dummydata' в данном случае

Очевидно, что я не могу получить содержимое из cleaned_data. Это не формальное поле формы. Я не могу увидеть его с помощью

request.POST.get('dummydata')

Есть какие-нибудь мысли о том, как я могу получить доступ к фиктивным данным в моей функции views?

Все, что вам нужно сделать в вашей ситуации, это указать атрибут name для вашего флажка. Вот также ссылка, которая может оказаться полезной. Что-то вроде этого:

<form action = "" method = "post" enctype="multipart/form-data">
  <div class="form-check form-switch">
    <label class="form-check-label" for="dummydata">Use Dummy Data</label>
    <input class="form-check-input" type="checkbox" role="switch" id="dummydata" checked name="dummy">
  </div>
    {% csrf_token %}
  {{form | crispy}}
  <button id="submit" type="submit" class="btn btn-primary">Analyse</button>
</form>

А затем request.POST:

<QueryDict: {'dummy': ['on'], 'csrfmiddlewaretoken': ['11wTd1DBszhGWk4JGFUgM4sH2lOSxLD44lu1g5XqtvY9K9z0ptdceeRMdx2ZFgjK'], 'doctype': ['a']}>
Вернуться на верх