Форма Django выбрасывает ошибки при отображении

Я создал POST Django форму с несколькими полями ввода. Многие из них являются обязательными, и они выбрасывают ошибку о том, что они обязательны, на рендере сайта. Также они выбрасывают ошибку над ними, хотя я указал, что они выбрасывают ее в блоке под ними. Пожалуйста, помогите.

ОПРЕДЕЛЕНИЕ ФОРМЫ

class Install_Version_Form(forms.Form):
    project = forms.CharField(widget=forms.TextInput(
        attrs={'class': 'textInputAddMach', 'placeholder': "project"}), max_length=100, required=True)
    privacy = forms.ChoiceField(choices=privacy, required=True)
    iteration = forms.CharField(widget=forms.TextInput(
        attrs={'class': 'textInputAddMach', 'placeholder': "iteration"}), max_length=100, required=True)
    machine_name = forms.CharField(widget=forms.TextInput(
        attrs={'class': 'textInputAddMach', 'placeholder': "machine name"}), max_length=100, required=True)
    version = forms.CharField(widget=forms.TextInput(
        attrs={'class': 'textInputAddMach', 'placeholder': "e.g. 0.1"}), max_length=100, required=True)

    def __init__(self, *args, **kwargs):
        super(Install_Version_Form, self).__init__(*args, **kwargs)

    def clean(self):
        cleaned_data = super().clean()

УПАКОВКА CTX ПРЕДСТАВЛЕНИЯ ФОРМЫ

def installation(request):
    ctx = {
        "installVersionForm": None
    }
    ctx["installVersionForm"] = Install_Version_Form(request.POST)
    if request.method == 'POST':
        form = Install_Version_Form(request.POST)
        if form.is_valid():
          (contact cloud)
    else:
        ctx["installVersionForm"] = form
    
    return render(request, "installation.html", ctx)

HTML ШАБЛОН

{% block extend_content %}
    <form action="" method="post">
        {% csrf_token %}
        {{installVersionForm.as_p}}
        <input type="submit" value="add new version">
    </form>
    <br/>
    <br/>
    <br/>
    {% if installVersionForm.errors %}
        {% for error in installVersionForm.errors %}
            <small>{{ error }}</small>
        {% endfor %}
    {% endif %}
    {% if installVersionForm.messages %}
        {% for message in installVersionForm.messages %}
            <small>{{ message }}</small>
        {% endfor %}
    {% endif %}
{% endblock %}

При первом создании экземпляра формы не обязательно указывать request.POST. В противном случае форма будет работать так, как будто она была заполнена вашим пользователем, даже если это не так.

def installation(request):
    ctx = {
        "installVersionForm": None
    }
    ctx["installVersionForm"] = Install_Version_Form() <=====
    if request.method == 'POST':
        form = Install_Version_Form(request.POST)
        if form.is_valid():
          (contact cloud)
    else:
        ctx["installVersionForm"] = form

    return render(request, "installation.html", ctx)

А чтобы было что-то чистое, я бы сделал это так :

def installation(request):
    if request.method == 'GET':
        ctx = {
            "installVersionForm": Install_Version_Form()
        }
    if request.method == 'POST':
        form = Install_Version_Form(request.POST)
        if form.is_valid():
          (contact cloud)
        else:
            ctx = {
            "installVersionForm": Install_Version_Form(request.POST)
        }


    return render(request, "installation.html", ctx)
Вернуться на верх