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.
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?
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.