2017-02-07 67 views
2

我想獲得與其輸入名稱相對應的formset錯誤。這裏我使用ajax發送表單數據。帶輸入名稱的Django Formset錯誤

models.py

class Category(models.Model): 
    category = models.CharField(max_length=128) 

forms.py

class CategoryForm(forms.ModelForm): 
    class Meta: 
    model=Category 
    field ="__all__" 

CategoryFormset = modelformset_factory(Category, CategoryForm, , min_num=2, extra=0) 

當我提交表單,我有這樣的

Python Shell中的錯誤

formset.errors 
[{'category': [u'This field is required.']}, {'category': [u'This field is required.']}] 

但在我的模板輸入名稱是不同的form-0-categoryform-1-category。所以有可能得到這樣的錯誤: [{'form-0-category': [u'This field is required.']}, {'form-1-category': [u'This field is required.']}]。 有人請幫助我。

模板

<p> 
    <input id="id_form-0-category" maxlength="128" name="form-0-category" type="text"/> 
</p> 

<p> 
    <input id="id_form-1-category" maxlength="128" name="form-1-category" type="text" /> 
</p> 
+0

請問你可以包括代碼執行該formset的驗證嗎? –

回答

2

Django不提供你想要的格式錯誤列表,但你可以自己生成它:

prefixed_errors = [{'%s-%s-%s' % (formset.prefix, index, k): v for k,v in errors.items()} 
        for (index, errors) in enumerate(formset.errors)] 

這產生的詞典列表中你題。我想你可能需要一個字典,你可以得到:

errors_dict = {'%s-%s-%s' % (formset.prefix, index, k): v for (index, errors) in enumerate(formset.errors) for k,v in errors.items()} 
+0

很好的回答....感謝一個looooooooooooooooooooooooooooooot ............ – Thameem

+0

@Alasdair,好像你在你的答案中有一個印刷錯誤。值得一提的是,它應該是'formset.errors'而不是'formset_errors'。但是在這個修正案之後它不起作用:( –

+0

是的,第二個例子應該是'formset.prefix'和'formset.errors'。這些改變對我很有用。 – Alasdair