2017-02-07 8 views
2

Ich möchte Formset-Fehler entsprechend seinem eingegebenen Namen erhalten. Hier verwende ich Ajax, um die Formulardaten zu senden.Django Formset-Fehler mit Eingabe Name

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) 

, wenn ich das Formular abschicken, ich habe die Fehler wie diese

Python-Shell

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

Aber In meinen Vorlagen ist der eingegebene Name verschiedene form-0-category und form-1-category. Also ist es möglich, Fehler in etwa so zu bekommen: [{'form-0-category': [u'This field is required.']}, {'form-1-category': [u'This field is required.']}]. Jemand bitte hilf mir.

Vorlagen

<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

Könnten Sie bitte den Code, wo Sie die Validierung dieses Formset durchführen? –

Antwort

2

Django bietet keine Liste der Fehler in dem Format, das Sie wollen, aber Sie können es selbst erzeugen:

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

dies Ihre Liste Wörterbücher wie in erzeugt Frage. Ich denke, dass Sie vielleicht ein einzelnes Wörterbuch wünschen, das Sie erhalten konnten:

+0

große Antwort .... danke ein looooooooooooooooooooooooooot ............ – Thameem

+0

@Alasdair, scheint wie Sie einen Druckfehler in Ihrer Antwort haben. Um es zu erwähnen, sollte es "formset.errors" statt "formset_errors" sein. Aber es funktioniert auch nicht nach dieser Änderung :( –

+0

Ja, das zweite Beispiel sollte 'formset.prefix' und' formset.errors' sein. Mit diesen Änderungen funktioniert es für mich. – Alasdair

Verwandte Themen