Предотвращение отправки форм 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'}),
        },
    )
Вернуться на верх