Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: add a field to a modelform

I want to add an extra field to a ModelForm. It seems easy, but I get the following error:

Django Version: 1.4 pre-alpha SVN-16573
Exception Type: TypeError
Exception Value:    
argument of type 'NoneType' is not iterable
Exception Location: /usr/local/lib/django-trunk/django/forms/models.py in construct_instance, line 39
Python Executable:  /usr/bin/python
Python Version: 2.6.6

This is the code:

class NodeForm(forms.ModelForm):
    password2 = forms.CharField(max_length=20, required=True, widget=forms.PasswordInput())

    class Meta:
        model = Node

    def __init__(self, *args, **kwargs):
        super(NodeForm, self).__init__(*args, **kwargs)
        # css classes for fields
        for v in self.fields:
            self.fields[v].widget.attrs['class'] = 'text ui-widget-content ui-corner-all'

    def clean(self):
        ''' Calls parent clean() and performs additional validation for the password field '''
        super(NodeForm, self).clean()
        password = self.cleaned_data.get('password')
        password2 = self.cleaned_data.get('password2')
        # password and password2 must be the same
        if password != password2:
            raise forms.ValidationError('I due campi password non corrispondono.')

I was not able to fix it. What am I doing wrong?

like image 784
nemesisdesign Avatar asked Jul 29 '11 13:07

nemesisdesign


1 Answers

You should return cleaned data from clean method as documented here That is:

def clean(self):
    # perform checks
    return self.cleaned_data
like image 80
Kirill Avatar answered Sep 20 '22 23:09

Kirill