Мне интересно, есть ли способ доступа к встроенным формам при проверке родительского элемента? Например, если мои настройки выглядят так:
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()
Я понимаю, что могу получить родительские данные в дочернем элементе - но мой сценарий использования включает несколько дети, у которых есть данные для передачи родителю - и я хотел бы проверить на верхнем уровне (если это возможно).
Я также пытался выполнить проверку в методе model.Parent.clean()
, но Child
модели сохраняются после родительского, так что это также выглядит как не начальный.
Отходя от ответа ниже, я также пытался использовать пользовательский набор форм:
class ParentFormSet(forms.BaseModelFormSet):
def clean(self):
if any(self.errors):
return
for f in self.forms:
print(f.cleaned_data)
class ParentForm(forms.ModelForm):
class Meta:
model = models.Parent
fields = '__all__'
formset = ParentFormSet
Но ничего не происходит когда-нибудь печатали, чтобы к нему не было доступа?