2013-03-26 6 views
6

Platzhalter, Klasse nicht gesetzt wurden, wenn versucht attrs durch die Djangos für Spezifizierer anzuwenden forms.DateInputDjango forms.DateInput gilt nicht die gegebenen Attribute in attrs Feld

Die Form ist ein ModelForm.

Und das nach docs

Takes gleichen Argumente wie TextInput-, mit einem weiteren optionalen Argument:

widgets = { 
    'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
        attrs={'class':'myDateClass', 
          'placeholder':'Select a date'} 
        ) 
} 

Das gleiche beantragt wird:

Hier ist der Code a forms.TextInput und es funktioniert gut.

Was fehlt mir hier?

Nur jemand will eine vollständige Klassencode:

class trademark_form(ModelForm): 
    my_date_field = DateField(input_formats=['%d-%m-%Y']) 
    class Meta: 
     model = myModel 

     widgets = { 
        'my_date_field': forms.DateInput(format=('%d-%m-%Y'), attrs={'class':'myDateClass', 'placeholder':'Select a date'}), 
        'field1': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..'}), 
        'field2': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..', 'readonly':'readonly', 'value':10}), 
        'desc': forms.Textarea(attrs={'class':'textAreaInputClass', 'placeholder':'Enter desc', 'rows':5}), 

       } 
     exclude = ('my_valid_field') 

Der erzeugte HTML-Code für das Feld, my_date_field:

<input type="text" id="id_my_date_field" name="my_date_field"> 

Der erzeugte HTML-Code für das Feld, field1:

<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1"> 
+0

Können Sie zeigen, welche Ergebnisse in auf Ihrer Seite machen. Ich bekomme, . Auch was soll der Platzhalter hier tun? Sollten Sie nicht Label – dusual

Antwort

11

Da du deine Post nicht postest m-Code, meine beste Vermutung ist, dass man explizit ein Formularfeld instanziiert wie diese meine Vermutung bestätigt, indem Sie den Code veröffentlichen, die in etwa wie folgt aussieht:

class MyForm(forms.ModelForm): 
    my_date_field = forms.DateField() 

    class Meta: 
     model = MyModel 
     widgets = { 
      'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
              attrs={'class':'myDateClass', 
              'placeholder':'Select a date'}) 
     } 

Ich kann sagen, dass es nicht funktioniert, denn wenn man explizit eine instanziiert Wenn Sie ein solches Formularfeld verwenden, geht Django davon aus, dass Sie das Formularfeldverhalten vollständig definieren möchten. Daher können Sie das widgets Attribut der inneren Meta Klasse nicht verwenden.

den Hinweis am Ende von Abschnitt zu overriding the default field types or widgets lautet:

Felder definiert deklarativ gelassen werden wie sie ist, also irgendwelche Anpassungen vorgenommen Meta-Attribute wie Widgets, Etiketten, help_texts oder Error_messages werden ignoriert; Diese gelten nur für Felder , die automatisch generiert werden.

+0

verwenden Überprüfen Sie die in der Frage aktualisiert. Und die Antwort, die du gepostet hast, ist irrelevant! – ThinkingMonkey

+0

Ich klärte meine Antwort. – Martin

+1

Danke für die Eingabe. Ich sehe das immer noch nicht explizit in den Dokumenten erwähnt. Daher meine Verwirrung. Du hast recht. – ThinkingMonkey

1

basierend auf Antwort von @ Martin und das Lesen der Dokumentation Django die endgültige Lösung sollte sein:

class MyForm(forms.ModelForm): 
    my_date_field = forms.DateField(
     widget=forms.DateInput(format=('%d-%m-%Y'), 
           attrs={'class':'myDateClass', 
           'placeholder':'Select a date'})) 

    class Meta: 
     model = MyModel 
     widgets = { 
     }