Why is "blank" is missing in django.forms.CharField, but present in django.db.models.CharField?
When creating your form, add the following parameter to CharField
apart from the max_length
, widget and validators:
forms.CharField(...,required = False)
In Django, blank=True
in models correlates to required=False
in forms.
Comments
-
rzetterberg almost 2 years
Background
I have a model with two fields that are set the blank:
class News(models.Model): title = models.CharField(max_length = 50, blank = True) info = models.TextField(blank = True)
The thing is that I want to set the
max_length
dynamically when the form is built, so I have a custom form:class NewsForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(NewsForm, self).__init__(*args, **kwargs) title_max_length = 20 info_max_length = 100 self.fields["title"] = forms.CharField(max_length = title_max_length) self.fields["info"] = forms.CharField( widget = forms.Textarea, validators = [ MaxLengthValidator(info_max_length) ] )
Note: Those two length values are actually fetched from the database, but I chose not to include that code to keep the examples shorter.
The problem
When I'm using those custom fields the
blank
option is overwritten/ignored.I tried just adding the max_length, widget and validators to the existing fields, like this:
class NewsForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(NewsForm, self).__init__(*args, **kwargs) title_max_length = 20 info_max_length = 100 self.fields["title"].max_length = title_max_length self.fields["info"].widget = forms.Textarea self.fields["info"].validators = [MaxLengthValidator(info_max_length)]
When doing this the
blank
option works, but the dynamic max_length is not applied to the form.I tried to look in the django source, but I'm quite new so it's too much to take in right now.
Is there some way I can achieve this?
-
Hendy Irawan over 6 years<del>not working for me in Django 1.11, still asks in django admin</del> Works after server restart (hmm, it usually auto-reloads)