2012-03-24 59 views
0

我要回已使用Django modelformset_factoryDjango的modelformset_factory無效,返回request.POST數據形式

視圖中輸入回發生在表單中的數據

from django.forms.models import modelformset_factory 

ArticleFormSet = modelformset_factory(Article, extra=2) 
formset = ArticleFormSet(queryset=Article.objects.none()) 

if request.POST: 
    formset = ArticleFormSet(request.POST) 

    if formset.is_valid(): 
     instances = formset.save(commit=False) 
     formset = ArticleFormSet(queryset=instances) 
    else: 
     ## ?? RETURN formset with request.POST data in form ?? 
     pass 

模板

<form method="POST" id="articleForm" action=".">{% csrf_token %} 
    {% for form in forms %} 
    {{form.as_p}} 
    {% endfor %} 
</form> 

使用Django 1.4我得到:

Validation Error: No exception supplied 

已經嘗試了initial=request.POST的變化範圍,但沒有喜悅。

任何意見是讚賞謝謝你!

回答

0

檢查以查看「管理窗體」的細節是否未被自動傳遞,結果證明它們不是(在這裏:https://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementform)。

將此「管理表單數據」捲到request.POST似乎解決了其他不可思議的validation錯誤。我不知道這是一個真正的1.4錯誤?

if request.POST: 
    forms_mgmt = {'form-TOTAL_FORMS': u'2', 'form-INITIAL_FORMS': u'0', 'form-MAX_NUM_FORMS': u''} 
    data_dict = dict(request.POST.items() + forms_mgmt.items()) 

    formset = ArticleFormSet(data_dict) 

    if formset.is_valid(): 
     instances = formset.save(commit=False) 
     formset = ArticleFormSet(queryset=instances) 

感謝@丹尼爾羅斯曼幫助我不走錯路。

0

你不需要做任何事情。您的表單已經填充了POST數據。只需將其傳遞給模板。通常的做法是不要有一個else子句,但只要進入顯示首先顯示錶單的相同渲染調用即可。

+0

謝謝您的確認!這是我的想法。必須有一些其他的錯誤。因爲它仍然基於'formset = ArticleFormSet(request.POST)'返回'驗證錯誤',我懷疑模型有問題,雖然嘗試了一個簡化的模型並且有同樣的問題...我會繼續搜索, 謝謝。 – Williams 2012-03-24 12:31:01

+0

你能發佈完整的回溯嗎?很難用這條線進行調試。 – 2012-03-24 12:50:57

+0

謝謝!如果您好奇,追溯在這裏:http://dpaste.com/hold/720982/ – Williams 2012-03-24 22:27:18