2010-07-10 10 views
5

Próbuję przekazać dodatkowe informacje do pól formularza Django, które mają być wyświetlane w szablonie. Próbowałem przesłonić konstruktora i dodać kolejny obiekt do pola tak:Dołączanie dodatkowych informacji do pól formularza

self.fields['field_name'].foo = 'bar' 

ale w szablonie tym:

{{ form.field_name.foo }} 

nic nie drukuje. Czy ktoś wie, jak dodać dodatkowe informacje do pola bez przepisywania/dziedziczenia klas pól formularzy?

+0

pokrewne: http://stackoverflow.com/questions/2270550/warnings-or-even-info-messages-instead-of-only-errors-in-django – guettli

Odpowiedz

6

Według django.forms.forms, metoda z Form__getitem__() tworzy coś, co nazywa się BoundField z pola przed wpuszczeniem go, tym samym pozbawiając ją niezależnie od zmiany. Jeśli naprawdę chcesz wstawić więcej funkcjonalności w tym, zastąpić tę metodę, aby robić rzeczy do dziedziny związanej przed wpuszczeniem go:

class MyForm(forms.Form): 
    def __getitem__(self, name): 
     boundfield = super(forms.Form,self).__getitem__(name) 
     boundfield.foo = "bar" 
     return boundfield 

Następnie "bar" pojawi się na wszystkich polach w tej formie. Możesz także utworzyć funkcję i wywołać ją, aby uczynić ją czymś więcej niż tylko zakodowanym ciągiem znaków.

Podczas gdy bardziej standardowym jest dodawanie kolejnych pól lub dodawanie właściwości do samego formularza, jeśli masz zupełnie nową klasę informacji, które każde pole musi zawierać, może to zrobić za Ciebie.


Innym sposobem, aby dostać to samo jest, aby edytować atrybut pola, a następnie do niego dostęp za pośrednictwem BoundField „s "field" atrybut:

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs) 
     super(forms.Form, self).__init__(*args, **kwargs) 
     self.fields['field_name'].foo = "bar" 

Następnie, aby uzyskać dostęp do foo w szablonie:

{{ form.field_name.field.foo }} 
+1

Dzięki za t wyjaśnienie. Wypróbowałem drugie z tych dwóch podejść i zadziałało jak urok - jeszcze raz dziękuję. – Max

Powiązane problemy