Мне интересно, есть ли способ получить доступ к встроенным формам при проверке родителя. Например, если мои настройки выглядят так:
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()