2013-05-06 2 views
5

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?

+2

Haben Sie versucht, den erforderlichen = False-Parameter zu Ihrem Formular hinzuzufügen? –

+0

@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

+0

Als Antwort hinzugefügt! Vielen Dank. –

Antwort

12

Wenn Ihr Formular erstellen, die folgenden Parameter auf CharField neben dem max_length, Widget und Validatoren hinzufügen:

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

In Django, blank = True in Modellen korrelieren in Formen False = erforderlich.

+0

funktioniert nicht für mich in Django 1.11, fragt immer noch in django admin Funktioniert nach dem Serverneustart (hmm, es wird normalerweise automatisch neu geladen) –