what is the diff between save_model and save_formset in django admin
django, django-admin, python
Solution
The documentation could use a little clarification.
- `save_model` is called during add or change to save the base model. It is specifically not intended to save related or inlined models.
- `save_related` is called (once) after `save_model` completes to save off all related / inlined models.
- `save_formset` is called potentially many times during each add / change, once for every inline defined on your `ModelAdmin`. It is called by the base class implementation of `save_related`.
If you look at the code for `admin.ModelAdmin`, you can see that `save_model` and `save_related` happen one after the other:
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 to call `save_formset` for each inline:
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)
Problem
I am reading the `save_model` and `save_formset` in django admin from here https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model But I am confused as to when `save_formset` is called. Shouldn't the formset be saved during `save_model`?