Django inline formset не сохраняет значения по умолчанию

У меня есть дочерний inlineformset, который сохраняет значение, если оно было изменено пользователем, но не сохраняет значение по умолчанию, если оно осталось неизменным.

SeVsEff является ребенком, а patient является родителем

models.py

class Patient(TimeStampedModel):
    patient_id = models.UUIDField(
        primary_key=True, unique=True, default=uuid.uuid4, editable=False
    )
    name = models.CharField("Patient Name", max_length=255)

    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, null=True, on_delete=models.SET_NULL
    )

class SeVsEff(TimeStampedModel):
    value = models.IntegerField(default=20)
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE)

forms.py

class PatientForm(ModelForm):
    class Meta:
        model = Patient
        fields = ["name"]

SevseffFormSet = inlineformset_factory(
    Patient,
    SeVsEff,
    fields=("value",),
    widgets={'value': RangeInput()},
    extra=0,
    min_num=1,
    validate_min=True,
    labels=None,
)

views.py

    def post(self, *args, **kwargs):
        form = PatientForm(data=self.request.POST)
        sevseff_formset = SevseffFormSet(data=self.request.POST)

        if form.is_valid():
            patient_instance = form.save()
            patient_instance.user = self.request.user
            patient_instance.save()

            if sevseff_formset.is_valid():
                sevseff_name = sevseff_formset.save(commit=False)
                for sevseff in sevseff_name:
                    sevseff.patient = patient_instance
                    sevseff.save()

Так что я думаю, что проблема в том, что sevseff_formset не регистрируется как действительный, пока он не изменен, но если я добавлю что-то вроде:

            if not sevseff_formset.has_changed():
                sevseff_name = sevseff_formset.save(commit=False)
                for sevseff in sevseff_name:
                    sevseff.patient = patient_instance
                    sevseff.save()

Это не работает, так как имя sevseff_name пустое.

Это делает это:

sevseff_name = sevseff_formset.save(commit=False)
for sevseff in sevseff_name:
    sevseff.patient = patient_instance
    sevseff.save()
if not sevseff_name:
    SeVsEff(value=20, patient=patient_instance).save()

Решение от https://forum.djangoproject.com/t/django-inline-formset-not-saving-default-values/10647/3

Вернуться на верх