3
是否有可能建立一個在Django admin中創建對象的兩階段表單?構建一個用於添加對象的兩階段Django管理表單?
當管理員用戶訪問/admin/my-app/article/add/
時,我想顯示一些選項。然後,應用程序將根據所做的選擇顯示帶有預先計算的字段的創建頁面。
是否有可能建立一個在Django admin中創建對象的兩階段表單?構建一個用於添加對象的兩階段Django管理表單?
當管理員用戶訪問/admin/my-app/article/add/
時,我想顯示一些選項。然後,應用程序將根據所做的選擇顯示帶有預先計算的字段的創建頁面。
您可以在myapp.article
的ModelAdmin
(Source)上覆蓋add_view
方法。它負責渲染模型並向數據庫添加對象。
在添加您的功能時,您可能想保留原始代碼而不是複製/修改它。
草案
def add_view(self, request, **kwargs):
if Stage1:
do_my_stuff()
return response
else:
return super(ModelAdmin, self).add_view(self, request, **kwargs)
現在需要兩個階段之間進行區分。 GET查詢字符串中的參數可以做到這一點。要將初始數據傳遞給管理員中的表單,您只需要將字段名值對作爲參數包含在查詢字符串中。
草案2
def add_view(self, request, **kwargs):
if 'stage2' not in request.GET:
if request.method == 'POST':
# calculate values
parameters = 'field1=foo&field2=bar'
return redirect('myapp_article_add' + '?stage2=1&' + parameters)
else:
# prepare form for selections
return response
else:
return super(ModelAdmin, self).add_view(self, request, **kwargs)
你可能需要看看代碼返回在第一階段的正確響應。有幾個模板變量add_view
集,但希望這是一個很好的開始看更進一步。
保存「部分」項目是否會出現問題?如果不是,您可以簡單地在保存方法中預先計算並將用戶返回到添加的項目。 – Wolph 2011-02-10 00:50:57