django admin中save_model和save_formset之间的差异是什么

use*_*107 5 python django django-admin

我正在这里阅读save_modelsave_formsetdjango管理员

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

但我很困惑何时save_formset被召唤.

不应该保存formset save_model吗?

Myk*_*lis 8

文件可以使用一些澄清.

  • save_model在添加或更改期间调用以保存基本模型.它特别用于保存相关或内联模型.
  • save_relatedsave_model完成后调用(一次)以保存所有相关/内联模型.
  • save_formset在每次添加/更改期间可能会多次调用,一次为您定义的每个内联调用ModelAdmin.它由基类实现调用save_related.

如果您查看代码admin.ModelAdmin,您可以看到save_modelsave_related一个接一个地发生:

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)
Run Code Online (Sandbox Code Playgroud)

并且save_related有一个简单的实现来调用save_formset每个内联:

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)
Run Code Online (Sandbox Code Playgroud)


pra*_*bha 1

save_model 用于正在编辑的模型,即您注册 ModelAdmin 的任何模型

save_formset 用于保存表单集(ModelAdmin.inlines)