2013-05-06 1 views
5

фон

У меня есть модель с двумя полями, которые установлены заготовки:Почему в 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, но я совершенно новый, поэтому сейчас слишком много, чтобы принять его.

Есть ли способ достичь этого?

+2

Вы попробовали добавить в форму формулу требуемого = False? –

+0

@AlagappanRamu: Нет, я этого не сделал. Я был так сосредоточен на поиске «пустого», который я больше всего пропустил в документах. Я добавил 'required = False' в' CharField' и решил проблему. Напишите свой комментарий в качестве ответа, чтобы я мог принять его и перенести его. Спасибо! – rzetterberg

+0

Добавлено как ответ! Благодарю. –

ответ

12

При создании формы, добавьте следующий параметр в CharField кроме max_length, виджет и валидаторов:

forms.CharField(...,required = False) 

В Django, пустой = True в моделях коррелирует требуется = False в формах.

+0

не работает для меня в Django 1.11, все еще спрашивает в django admin Работает после перезагрузки сервера (хм, он обычно перезагружается) –