Проверка формы Django: получить данные дочерней формы в parent

Мне интересно, есть ли способ получить доступ к встроенным формам при проверке родителя. Например, если мои настройки выглядят так:

admin.py

class ChildInline(nested_admin.NestedTabularInline):
    form = forms.ChildInlineForm
    model = models.Child
    extra = 0


@admin.register(models.Parent)
class ParentAdmin(nested_admin.NestedModelAdmin):
    form = forms.ParentForm
    inlines = [ChildInline]

models.py

class Parent(models.Model):
    name = models.CharField(max_length=10)

class Child(models.Model):
    name = models.CharField(max_length=10)
    parent = models.ForeignKey(
        Parent, on_delete=models.CASCADE, related_name='children'
    )

forms.py

class ChildForm(forms.ModelForm):
    class Meta:
        model = models.Child
        fields = '__all__'


class ParentForm(forms.ModelForm):
    class Meta:
        model = models.Parent
        fields = '__all__'

    def clean(self):
        super().clean()
        # How would I access the ChildForm here?

Есть ли способ получить доступ к ChildForm из ParentForm.clean() Я понимаю, что мог бы получить родительские данные в дочернем ParentForm.clean() но мой сценарий использования включает в себя несколько дочерних элементов, которые имеют данные для передачи родителю, и я хотел бы проверить на верхний уровень (если возможно).

Я также попытался выполнить проверку в model.Parent.clean() , но model.Parent.clean() модели сохраняются после родительского, так что это также выглядит как начало.

Всего 1 ответ


Возможно, вы сможете переопределить метод save_formset() ? https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_formset


@admin.register(models.Parent)
class ParentAdmin(nested_admin.NestedModelAdmin):
    form = forms.ParentForm
    inlines = [ChildInline]

    def save_formset(self, request, form, formset, change):
        parent_form = form
        for form_set_form in formset
            if formset_form.is_valid():
                formset_form_data = formset_form.cleaned_data
                # do some validation here...
        formset.save()




Есть идеи?

10000