简体   繁体   中英

what is the diff between save_model and save_formset in django admin

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 ?

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)

save_model保存主模型save_related保存ManyToMany并为每个特定内联调用save_formset

save_model is for the model being edited ie whatever model you registered your ModelAdmin with

save_formset is for saving the formsets (ModelAdmin.inlines)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM