2013-03-26 20 views
6

zastępczy, klasa nie uzyskiwanie ustawione gdy próbował zastosować przez Django za attrs specyfikatorem dla forms.DateInputDjango forms.DateInput nie stosuje atrybuty podane w polu attrs

Formularz jest ModelForm.

I według docs

Staje same argumenty jak TextInput, z jednym więcej opcjonalny argument:

Oto kod:

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

To samo stosuje się przez a forms.TextInput i działa dobrze.

Czego mi tu brakuje?

Tylko ktoś chce mieć pełny kod Klasa:

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

wygenerowanym HTML dla pola, my_date_field:

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

wygenerowanym HTML dla pola, field1:

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

można pokazać, co czyni wyniki w na swojej stronie. Otrzymuję, . Co powinien tu zrobić symbol zastępczy. Nie powinieneś używać etykiety – dusual

Odpowiedz

11

Ponieważ Ty nie zamieściłeś swojej Kod m, mój najlepszy przypuszczenie to, że jawnie instancja pole formularza tak potwierdziła moje przypuszczenia, zamieszczając kod, który wygląda mniej więcej tak:

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

mogę powiedzieć, że to nie działa, ponieważ jeśli wyraźnie instancji formować pole w ten sposób, Django zakłada, że ​​chcesz całkowicie zdefiniować zachowanie pola formularza; w związku z tym nie można użyć atrybutu widgets wewnętrznej klasy Meta.

Nota na końcu odcinka o overriding the default field types or widgets stwierdza:

Pola zdefiniowane deklaratywnie pozostało jak jest, więc wszelkie modyfikacje dokonane Meta atrybuty takie jak widgety, etykiety, help_texts lub error_messages są ignorowane; mają one zastosowanie tylko do pól , które są generowane automatycznie.

+0

Sprawdź zaktualizowaną wersję pytania. A odpowiedź, którą wysłałeś, jest nieistotna! – ThinkingMonkey

+0

Ja wyjaśniłem moją odpowiedź. – Martin

+1

Dzięki za wejście. Nadal nie widzę tego wyraźnie wymienionego w dokumentach. Stąd moje zamieszanie. Masz rację. – ThinkingMonkey

1

na podstawie odpowiedzi @Martin i czytanie dokumentacji Django ostateczne rozwiązanie powinno być:

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