Предотвращение отправки форм django, если они пусты
У меня есть форма, которую я хочу, чтобы пользователи могли отправить только в том случае, если поле в наборе форм заполнено. Это динамический набор форм, в котором пользователи могут добавлять и удалять строки, я хочу, чтобы хотя бы в одной строке была запись. Однако кажется, что набор форм считается действительным, даже если он не заполнен (несмотря на значение blank=False в соответствующей модели)
models.py
class Patient(TimeStampedModel):
patient_id = models.UUIDField(primary_key=True, unique=True, default=uuid.uuid4, editable=False)
age = models.IntegerField("Age")
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=True,
on_delete=models.SET_NULL)
class Diagnosis(TimeStampedModel):
DIAG_CHOICES = [
(‘heart’, (
(‘mi’, ‘heart attack’),
(‘chf’, ‘heart failure’),
)
),
(‘kidney’, (
(‘arf’, ‘acute renal failure’),
(‘crf’, ‘chronic renal failure’),
)
),
]
diag_name = models.CharField(
"diag", max_length=200,
choices=DIAG_CHOICES, blank=False)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
forms.py
class PatientForm(ModelForm):
class Meta:
model = Patient
fields = ['age']
DiagnosisFormSet = inlineformset_factory(
Patient, Diagnosis, fields=("diag_name", ), extra=1)
views.py
class PatientAddView(LoginRequiredMixin,TemplateView):
model = Patient
template_name = "../templates/patient/add.html"
def get(self, *args, **kwargs):
patient_form = PatientForm
diagnosis_formset = DiagnosisFormSet(queryset=Diagnosis.objects.none())
return self.render_to_response({'diagnosis_formset': diagnosis_formset,
'patient_form': patient_form
})
def post(self, *args, **kwargs):
form = PatientForm(data=self.request.POST)
diagnosis_formset = DiagnosisFormSet(data=self.request.POST)
if form.is_valid():
patient_instance = form.save()
patient_instance.user = self.request.user
patient_instance.save()
if diagnosis_formset.is_valid():
diag_name = diagnosis_formset.save(commit=False)
for diag in diag_name:
diag.patient = patient_instance
diag.save()
return redirect(reverse(
'patient:treatment_detail',
kwargs={"patient_id": patient_instance.patient_id}))
необходимо добавить условие "else" при проверке "diagnosis_formset.is_valid()"
if diagnosis_formset.is_valid():
diag_name = diagnosis_formset.save(commit=False)
for diag in diag_name:
diag.patient = patient_instance
diag.save()
else:
render (self.request,"../templates/patient/add.html",{'diagnosis_formset': diagnosis_formset,
'patient_form': form})
from django.forms.widgets import Select
DiagnosisFormSet = inlineformset_factory(
Patient, Diagnosis, fields=("diag_name",), extra=1, min_num=1, validate_min=True,
widgets={
'diag_name': Select(attrs={'required': 'required'}),
},
)