python - django admin 中的 save_model 和 save_formset 之间有什么区别

标签 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 期间不应该保存 formset 吗?

最佳答案

documentation可以使用一点澄清。

  • 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)

并且 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)

关于python - django admin 中的 save_model 和 save_formset 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14931865/

相关文章:

django - 从管理表格内联访问外键字段

Django 管理数据错误 : Value too long for type character varying(150)

python - 如何将抓取的数据保存在AWS s3存储桶中

django - Django 测试的 HTML 报告

sql-server - 在Django数据库中插入多个值-原始sqlite语句

django.db.utils.ProgrammingError : Table doesn't exist

django - 在 django admin 中添加指向内联项目的完整更改表单的链接?

python - 安装line-in包时出错: NodeJS

python - 将非零值替换为 1

python - 使用 Tweepy API Search 搜索列表中的任何元素