2013-05-06 11 views
5

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ąć?

+2

Czy próbowałeś dodać parametr required = False do swojego formularza? –

+0

@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

+0

Dodano jako odpowiedź! Dzięki. –

Odpowiedz

12

Przy tworzeniu formularza, należy dodać następujący parametr do Charfield oprócz max_length, widget i weryfikatorów:

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

W Django, puste = True w modelach koreluje wymagane = False w formach.

+0

nie działa dla mnie w Django 1.11, wciąż pyta w django admin Działa po restarcie serwera (hmm, zwykle przeładowuje się automatycznie) –

Powiązane problemy