Форма 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)