2011-02-10 30 views
3

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

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

+1

保存“部分”项目是否会出现问题?如果不是,您可以简单地在保存方法中预先计算并将用户返回到添加的项目。 – Wolph 2011-02-10 00:50:57

回答

5

您可以在myapp.articleModelAdminSource)上覆盖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集,但希望这是一个很好的开始看更进一步。

相关问题