2009-07-29 51 views
1

下面是一個例子:你可以讓一個Django表單集合驗證初始數據嗎?

from django import forms 
class ArticleForm(forms.Form): 
    title = forms.CharField() 
    pub_date = forms.DateField() 

from django.forms.formsets import formset_factory 
ArticleFormSet = formset_factory(ArticleForm) 

formset = ArticleFormSet(initial=my_data) 

在例子中「my_data」是我想要形成顯示當任何用戶輸入之前先加載的數據。但是,我想繼續並對數據運行表單驗證,以便用戶在編輯數據之前可以查看是否存在任何已存在的錯誤。

我試着這樣做:

formset = ArticleFormSet(initial=my_data) 
formset.is_valid() 

但它並沒有幫助。

回答

1

如果數據剛剛從數據庫中直接出來,我看不到如何驗證錯誤。但是,這很容易做到 - 而不是像initial,那樣傳遞數據作爲data,就像它來自POST一樣。

formset = ArticleFormSet(data=my_data) 

這將表單設置爲綁定,並觸發驗證。

+2

這是行不通的,因爲用戶提交的數據是每個表單編號的一個大字典,例如{'form-386-pubdate':'2009-10-31 00:00:00','form -153-title':'135','form-123-title':'123',... formsets與普通形式有點不同。 – Greg 2009-07-30 12:34:39

0

使用

formset = ArticleFormSet(data=my_data)

非常重要,my_data應該是一個字典這種格式

data = { 
    'form-TOTAL_FORMS': u'2', 
    'form-INITIAL_FORMS': u'2', 
    'form-MAX_NUM_FORMS': u'', 
    'form-0-title': u'Test', 
    'form-0-pub_date': u'1904-06-16', 
    'form-1-title': u'Test', 
    } 

形式,TOTAL_FORMS和形式,INITIAL_FORMS是必需的!

相關問題