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

时间:2013-02-18 08:09:20

标签: python django django-admin

我正在阅读django admin中的save_modelsave_formset

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

但我很困惑何时调用save_formset

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

3 个答案:

答案 0 :(得分:8)

documentation可能会稍微澄清一下。

    在添加或更改期间调用
  • save_model以保存基本模型。具体而言旨在保存相关或内联模型。
  • {li> 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)

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)

答案 1 :(得分:2)

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

答案 2 :(得分:1)

save_model用于正在编辑的模型,即您使用

注册ModelAdmin的任何模型

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