7

我正在从这里阅读 django admin 中的save_modelandsave_formset

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

但我对何时save_formset调用感到困惑。

不应该在 期间保存表单集save_model吗?

4

3 回答 3

13

文档可以使用一些说明。

  • save_model在添加或更改期间调用以保存基本模型。它特别打算保存相关或内联模型。
  • save_related完成后调用(一次)save_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)

并且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)
于 2016-01-22T19:58:12.537 回答
3

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

于 2013-11-30T05:59:22.753 回答
1

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

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

于 2013-02-18T08:13:34.507 回答