我正在阅读django admin中的save_model
和save_formset
https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_model
但我很困惑何时调用save_formset
。
不应在save_model
期间保存表单集吗?
答案 0 :(得分:8)
documentation可能会稍微澄清一下。
save_model
以保存基本模型。具体而言不旨在保存相关或内联模型。save_related
在save_model
完成后调用(一次)以保存所有相关/内联模型。
在每次添加/更改期间,可能会多次调用save_formset
,对于ModelAdmin
上定义的每个内联,都会调用一次。它由save_related
的基类实现调用。如果您查看admin.ModelAdmin
的代码,可以看到save_model
和save_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)