2013-03-26 11 views
6

Segnaposto, non di classe sempre impostato quando ha cercato di applicare attraverso attrs identificatore del Django per forms.DateInputDjango forms.DateInput non si applica gli attributi di cui al campo attrs

La forma è un ModelForm.

E secondo il docs

prende stessi argomenti come TextInput, con un altro argomento opzionale:

Ecco il codice:

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

Lo stesso si applica per a forms.TextInput e funziona bene.

Cosa mi manca qui?

solo nessuno vuole un codice completo di classe:

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') 

Il codice HTML generato per il campo, my_date_field:

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

Il codice HTML generato per il campo, field1:

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

può mostrare ciò che rende i risultati in al vostro fianco. Ricevo, . Anche cosa dovrebbe fare il segnaposto qui. Non dovresti usare l'etichetta – dusual

risposta

11

Dato che il non ha inserito il tuo codice di m, la mia ipotesi migliore è che si istanziato esplicitamente un campo di modulo come questo confermato la mia ipotesi, pubblicando il codice che appare più o meno in questo modo:

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'}) 
     } 

posso dire che non funziona perché se si crea un'istanza in modo esplicito un campo di forma come questo, Django assume che tu voglia definire completamente il comportamento del campo di forma; pertanto, non è possibile utilizzare l'attributo widgets della classe interna Meta.

La nota alla fine della sezione circa overriding the default field types or widgets precisa che:

campi definiti declaratively sono lasciati così come è, pertanto eventuali personalizzazioni effettuate Meta attributi quali widget, etichette, help_texts o messaggi_errore sono ignorati; questi si applicano solo ai campi che vengono generati automaticamente.

+0

Controlla l'aggiornamento nella domanda. E la risposta che hai postato è irrilevante! – ThinkingMonkey

+0

Ho chiarito la mia risposta. – Martin

+1

Grazie per l'input. Non riesco ancora a vederlo esplicitamente menzionato nei documenti. Quindi, la mia confusione. Hai ragione. – ThinkingMonkey

1

in base alla risposta di @ Martin e la lettura della documentazione Django la soluzione finale dovrebbe essere:

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 = { 
     } 
Problemi correlati