7

私はここからdjango adminでsave_modelandを読んでいますsave_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_relatedsave_modelすべての関連/インライン モデルを保存するために、完了後に (1 回) 呼び出されます。
  • 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)
于 2016-01-22T19:58:12.537 に答える
1

save_model は、編集中のモデル用です。つまり、ModelAdmin を登録したモデルは何でも構いません。

save_formset は、フォームセット (ModelAdmin.inlines) を保存するためのものです。

于 2013-02-18T08:13:34.507 に答える