2013-02-01 46 views
7

我有一个场景,我试图计划开始编码,我正在考虑使用django wizarddjango向导,使用窗体和formset在相同的步骤

我的计划是用两个步骤构建一个django向导,第一个简单但第二个更复杂一点。第二步将包含一个表单,该表单将根据从第一步中选择的值进行重新设置,我可以看到自己正在执行的操作。我已经探索了所有现有的功能,我认为它可以轻松完成。

虽然我面临的挑战是在第二步本身。我有一个表单和一个formset,formset是一对多的表单(文章 - >图像),所以当到达第二步时,用户将能够上传一个或多个图像到同一篇文章。

我试图在谷歌邮件列表和stackoverflow上搜索每一处传递一个formset到Django向导类,但它看起来像你不能在同一步传递两个表单。

NewItemWizard.as_view([ 
    ('category', CategorySelectionForm), 
    ('article',  ArticleForm) 
]) 

如看到的那样,在上面的例子中的代码,我想能够既ArticleForm和ImageFormset传递到第二步骤。有没有办法做到这一点开箱即用?

根据我正在阅读的内容,我相信使用像get_context_data这样的函数可能会有所帮助,但它会非常黑客。

def get_context_data(self, form, **kwargs): 
    context = super(NewItemWizard, self).get_context_data(form=form, **kwargs) 
    if self.steps.current == 'article': 
     context.update({ 
      'image_formset': ImageFormset() 
     }) 
    return context 

任何人都可以建议更好的方法?

干杯,

+0

你看着[Django的表单向导](https://github.com/stephrdev/django-formwizard)?它支持formset。 –

回答

7

没有直API来完成它,但喜欢这里提到的一个干净的解决方案:

https://code.djangoproject.com/ticket/18830

+1

太棒了,谢谢!你让我很快乐!!! :) –

+0

**这种方法的好处在于,您不仅可以将其用于向导,还可以用于'通用视图',如'FormView'。每个人都应该检查这个[代码示例](https://code.djangoproject.com/attachment/ticket/18830/form_container.py)。** FormContainer'绝对值得成为Django Framework的一部分! –