构建一个用于添加对象的两阶段Django管理表单?

Mat*_*pel 4 django django-admin

是否有可能在Django管理员中构建一个用于创建对象的两阶段表单?

当管理员用户访问时/admin/my-app/article/add/,我想显示一些选项.然后,应用程序将根据所做的选择显示具有预先计算字段的创建页面.

Rei*_*cke 5

你可以覆盖add_view的方法ModelAdmin(来源的)myapp.article.它负责呈现模型并将对象添加到数据库.

在添加功能时,您可能希望保持原始代码的完整性,而不是复制/修改它.

草案

def add_view(self, request, **kwargs):
    if Stage1:
        do_my_stuff()
        return response
    else:
        return super(ModelAdmin, self).add_view(self, request, **kwargs)
Run Code Online (Sandbox Code Playgroud)

现在你需要区分这两个阶段.GET查询字符串中的参数可以执行此操作.要将初始数据传递到管理员中的表单,您只需要在查询字符串中包含fieldname值对作为参数.

草案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)
Run Code Online (Sandbox Code Playgroud)

您可能需要查看代码以在第一阶段返回正确的响应.有几个模板变量add_view集,但希望这是一个好看的开始.