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)