фон
У меня есть модель с двумя полями, которые установлены заготовки:Почему в django.forms.CharField отсутствует значение «blank», но присутствует в django.db.models.CharField?
class News(models.Model):
title = models.CharField(max_length = 50, blank = True)
info = models.TextField(blank = True)
Дело в том, что я хочу, чтобы установить max_length
динамически, когда форма строится, поэтому у меня есть настраиваемой формы :
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)
]
)
Примечание: эти два значения длины фактически извлекаются из базы данных, но я решил не включать этот код, чтобы сохранить примеры короче.
Проблема
Когда я использую эти пользовательские поля параметр blank
перезаписывается/игнорируется.
Я попытался просто добавив max_length, виджет и валидатор для существующих полей, например:
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)]
При этом опция blank
работает, но динамика max_length не применяется к форме.
Я попытался посмотреть источник django, но я совершенно новый, поэтому сейчас слишком много, чтобы принять его.
Есть ли способ достичь этого?
Вы попробовали добавить в форму формулу требуемого = False? –
@AlagappanRamu: Нет, я этого не сделал. Я был так сосредоточен на поиске «пустого», который я больше всего пропустил в документах. Я добавил 'required = False' в' CharField' и решил проблему. Напишите свой комментарий в качестве ответа, чтобы я мог принять его и перенести его. Спасибо! – rzetterberg
Добавлено как ответ! Благодарю. –