Hintergrund
Ich habe ein Modell mit zwei Feldern, die der Rohling gesetzt sind:Warum fehlt "leer" in django.forms.CharField, aber in django.db.models.CharField?
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
Die Sache ist, dass ich die max_length
dynamisch, wenn das Formular gesetzt werden soll gebaut wird, so habe ich eine benutzerdefinierte Formular :
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)
]
)
Hinweis: Diese beiden Längenwerte aus der Datenbank tatsächlich abgerufen werden, aber ich wählte diesen Code nicht schließen die Beispiele kürzer zu halten.
Das Problem
Wenn ich diese Gewohnheit bin mit Feldern der blank
Option überschrieben/ignoriert.
ich das max_length, Widget und Validatoren zu den bestehenden Feldern nur versucht, indem, wie folgt aus:
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)]
Wenn dies tun die blank
Option funktioniert, aber die dynamische max_length auf das Formular nicht angewendet wird.
Ich habe versucht, in der Django-Quelle zu suchen, aber ich bin ziemlich neu, also ist es zu viel, um es jetzt aufzunehmen.
Gibt es eine Möglichkeit, dies zu erreichen?
Haben Sie versucht, den erforderlichen = False-Parameter zu Ihrem Formular hinzuzufügen? –
@AlagappanRamu: Nein, habe ich nicht. Ich war so konzentriert auf die Suche nach "Blanko", dass ich es in den Dokumenten am meisten vermisst habe. Ich habe 'required = False' in der 'CharField'-Erstellung hinzugefügt und das hat das Problem gelöst. Schreibe deinen Kommentar als Antwort, damit ich ihn annehmen und verbessern kann. Vielen Dank! – rzetterberg
Als Antwort hinzugefügt! Vielen Dank. –