它的 calling sequence
假設有下面這樣的 modle and admin:
class SiteInfoForm(ModelForm): class Meta: model = SiteInfo def clean(self): print '[debug] site info form clean' return super(SiteInfoForm, self).clean() class SiteAttributeInlineFormset(forms.models.BaseInlineFormSet): def clean(self): super(SiteAttributeInlineFormset, self).clean() print '[debug] site attribute inline formset clean' class SiteAttributeInline(admin.StackedInline): model = SiteAttribute formset = SiteAttributeInlineFormset class SiteInfoAdmin(admin.ModelAdmin): inlines = (SiteAttributeInline, DomainPatternInline, ) form = SiteInfoForm def save_formset(self, request, form, formset, change): print '[debug] SiteInfoAdmin save formset' print type(form) print type(formset) return super(SiteInfoAdmin, self).save_formset(request, form, formset, change) def save_model(self, request, obj, form, change): print '[debug] SiteInfoAdmin save model' return super(SiteInfoAdmin, self).save_model(request, obj, form, change)
當按下 form 的 submit button 時
debug output 長這樣
[debug] site info form clean [debug] site attribute inline formset clean [debug] SiteInfoAdmin save model [debug] SiteInfoAdmin save formset <class 'django.forms.models.SiteInfoForm'> <class 'django.forms.formsets.SiteAttributeFormFormSet'> [debug] SiteInfoAdmin save formset <class 'django.forms.models.SiteInfoForm'> <class 'django.forms.formsets.DomainPatternFormFormSet'>
所以順序是
ModelForm.clean -> InlineFormset.clean -> ModelAdmin.save_model -> ModelAdmin.save_formset
沒有留言:
張貼留言