是否可以在Django admin中构建一个用于创建对象的两阶段表单?
当管理员用户访问/admin/my-app/article/add/
时,我想显示一些选项。然后,应用程序将根据所做的选择显示具有预先计算字段的创建页面。
答案 0 :(得分:5)
您可以覆盖add_view
的{{1}}(Source)上的ModelAdmin
方法。它负责渲染模型并将对象添加到数据库中。
在添加功能时,您可能希望保持原始代码的完整性,而不是复制/修改它。
<强>草案强>
myapp.article
现在你需要区分这两个阶段。 GET查询字符串中的参数可以执行此操作。要将初始数据传递给管理员中的表单,您只需要在查询字符串中包含fieldname值对作为参数。
草案2
def add_view(self, request, **kwargs):
if Stage1:
do_my_stuff()
return response
else:
return super(ModelAdmin, self).add_view(self, request, **kwargs)
您可能需要查看代码以在第一阶段返回正确的响应。有几个模板变量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)
集,但希望这是一个好看的开始。