forms.py
from datetime import datetime, date, timedelta
from django import forms
class MyForm(forms.Form):
field1 = forms.IntegerField()
date = forms.DateTimeField(initial=datetime.now)
field3 = forms.IntegerField(
help_text="Number of something")
field4 = forms.IntegerField(required=False)
field5 = forms.IntegerField(required=False)
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.fields['field1'].widget.attrs['readonly'] = True
def clean(self):
cleaned_data = super().clean()
submit_date = cleaned_data.get("date")
# relevant validation checks here
После отправки формы переменная submit_date
равна None
. Он не только None
, но и полностью отсутствует из словаря cleaned_data
.
Вот как выглядит диктант cleaned_data
при выполнении запроса:
{'field1': 1, 'field3': 22, 'field4': 0, 'field5': 200}
Что может быть причиной этой ошибки? Любая помощь будет высоко оценена.
РЕДАКТИРОВАТЬ
Шаблон:
<div class="row">
<div class="col-8">
<form action="{% url 'myapp:relevant_view' %}" method="POST">
{% csrf_token %}
<div class="card">
<div class="card-body">
{% crispy formset helper %}
</div>
</div>
</form>
</div>
</div>
views.py :
def main_view(request):
MyFormSet = formset_factory(MyForm, extra=0)
helper = MyFormSetHelper()
if request.method == 'POST':
formset = MyFormSet(request.POST)
if formset.is_valid():
all_in_list = []
for form in formset:
data = form.cleaned_data
field1 = data["field1"]
date = data["date"]
field3 = data["field3"]
field4 = data["field4"]
field5 = data["field5"]
model = Model(field1, date, field3, field4, field5)
all_in_list.append(model)
Model.objects.bulk_update(all)
return redirect('myapp:index_view')
formset = ReportFormSet(initial=helper_method_to_get_number_forms())
return render(request, 'myapp/template.html', {"formset": formset, "helper": helper})
helper.py :
class MyFormSetHelper(FormHelper):
def __init__(self, *args, **kwargs):
super(MyFormSetHelper, self).__init__(*args, **kwargs)
self.add_input(Submit('submit', 'Submit'))