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