2013-02-01 30 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的一部分! –