Peter Pik
Peter Pik

Reputation: 11193

Creating django form with null and blank field

I'm trying to create a form where both fields is optional however, i keep getting an error when setting null and blank. what am i doing wrong?

Error

super(CharField, self).__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'blank'

forms.py

class EditProfile(forms.Form):
    """
    A form that lets a user change their profile information
    """
        first_name = forms.CharField(
        label=("Fornavn"),
        strip=False,
        blank=True,
        null=True
    )
    last_name = forms.CharField(
        label=("Efternavn"),
        strip=False,
        blank=True,
        null=True,
    )
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        first_name = self.cleaned_data["first_name"]
        last_name = self.cleaned_data["last_name"]
        self.user.first_name = first_name
        self.user.last_name = last_name
        if commit:
            self.user.save()
        return self.user

Upvotes: 7

Views: 13553

Answers (3)

GeekyShacklebolt
GeekyShacklebolt

Reputation: 73

If you want to save it as None in case when no data provided in the form for that field. You can do it with empty_value parameter to CharField (Django Docs):

field_name = forms.CharField(required=False, empty_value=None)

Note: You should save null to a char field ONLY if you want to distinguish between null and "" (blank) on that field. Otherwise, a nullable char field is not much recommended.

Upvotes: 2

epinal
epinal

Reputation: 1465

As @danielcorreia said you don't use blank in a form, use required = False instead.

class EditProfile(forms.Form):
    """
    A form that lets a user change their profile information
    """
        first_name = forms.CharField(
        label=("Fornavn"),
        strip=False,
        required=False
    )
    last_name = forms.CharField(
        label=("Efternavn"),
        strip=False,
        required=False
    )
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super().__init__(*args, **kwargs)

    def save(self, commit=True):
        first_name = self.cleaned_data["first_name"]
        last_name = self.cleaned_data["last_name"]
        self.user.first_name = first_name
        self.user.last_name = last_name
        if commit:
            self.user.save()
        return self.user

Upvotes: 9

Przemek
Przemek

Reputation: 647

The CharField cunstructor dosent take blank as an argument. You should use required = False instead of using blank and null fields. By defaylt required is True. To make your code work write:

first_name = forms.CharField(label=("Fornavn"), strip=False, required=False)

Upvotes: 0

Related Questions