Tło
mam model z dwoma polami, które są ustawione półfabrykatu:Dlaczego w django.forms.CharField brakuje "pustego", ale występuje on w django.db.models.CharField?
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
Chodzi o to, że chcę, aby ustawić max_length
dynamicznie, gdy formularz jest zbudowany, więc mam niestandardowy formularz :
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)
]
)
Uwaga: te dwie wartości długości są faktycznie pobierane z bazy danych, ale nie zdecydował się na to, że kod, aby utrzymać przykłady krótszy.
Problem
Kiedy używam tych pól niestandardowych opcja blank
jest nadpisane/ignorowane.
Próbowałem po prostu dodając max_length, widget i weryfikatorów do istniejących pól, tak:
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)]
Kiedy robi to opcja blank
działa, ale dynamiczny max_length nie stosuje się do formy.
Próbowałem zaglądać do źródła django, ale jestem całkiem nowy, więc jest zbyt wiele do zaadaptowania.
Czy jest jakiś sposób, w jaki mogę to osiągnąć?
Czy próbowałeś dodać parametr required = False do swojego formularza? –
@AlagappanRamu: Nie, nie zrobiłem. Byłem tak skupiony na szukaniu "pustego", że najbardziej tęskniłem za nim w dokumentach. Dodałem 'required = False' w tworzeniu' CharField' i to rozwiązało problem. Napisz swój komentarz jako odpowiedź, abym mógł go zaakceptować i przegłosować. Dziękuję Ci! – rzetterberg
Dodano jako odpowiedź! Dzięki. –