What are the differences between save_model and save_formset in django admin

I read save_model and save_formset in django admin here

https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model

But I'm confused when save_formset is save_formset .

Should I not save a set of forms during save_model ?

+4
source share
3 answers

The documentation may use a little clarification.

  • save_model is called during add or change to save the base model. It is not specifically designed to save related or embedded models.
  • save_related is called (once) after save_model completes to save all related / inline models.
  • save_formset is called potentially many times during each addition / change, once for each inline string defined on ModelAdmin . It is called by the implementation of the save_related base class.

If you look at the admin.ModelAdmin code, you will see that save_model and save_related happen one after another:

 class ModelAdmin(BaseModelAdmin): def changeform_view(...): # ... if all_valid(formsets) and form_validated: self.save_model(request, new_object, form, not add) self.save_related(request, form, formsets, not add) 

and that save_related has a simple implementation for calling save_formset for each row:

 class ModelAdmin(BaseModelAdmin): # ... def save_related(self, request, form, formsets, change): form.save_m2m() for formset in formsets: self.save_formset(request, form, formset, change=change) 
+4
source

save_model is for the model edited, i.e. no matter what model you register your ModelAdmin with

save_formset is for saving forms (ModelAdmin.inlines)

+1
source

save_model saves the main model save_related saves ManyToMany and calls save_formset for each specific built-in

+1
source

All Articles