2013-02-18 35 views

回答

1

save_model是模型正在編輯即您註冊的ModelAdmin與

save_formset是用於保存表單集(ModelAdmin.inlines)

+0

然後什麼是'ModelAdmin.save_related'用於 – user192082107 2013-02-18 08:55:12

+1

save_related方法被給予HttpRequest,父級ModelForm實例,內聯表單集列表和基於是否添加或更改父級的布爾值。在這裏,您可以爲與父項相關的對象執行任何預保存或後保存操作。請注意,此時父對象及其表單已被保存。 – pratibha 2013-02-18 09:30:21

+0

根據save_model方法是添加還是更改對象,向save_model方法提供HttpRequest,模型實例,ModelForm實例和布爾值。在這裏,您可以進行任何保存前或保存後的操作。 Save_formset方法根據是否添加或更改父對象給出HttpRequest,父模型實例和布爾值。 – pratibha 2013-02-18 09:31:24

1

save_model節省主力機型 save_related節省ManyToMany並呼籲save_formset不管是什麼模式每個特定的內聯

4

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)