2011-10-14 24 views
5

Mam prosty formularz w Django, który wygląda mniej więcej tak:Jak zadeklarować pole formularza w Django, jeśli ma ono taką samą nazwę jak słowo kluczowe Python?

class SearchForm(forms.Form): 
    text = forms.CharField() 
    from = forms.DateField() 
    until = forms.DateField() 

która nie z SyntaxError, ponieważ from jest kluczowe Python.

Ja raczej nie zmieniam nazwy pola; Pasuje lepiej niż jakakolwiek alternatywa i jestem wybredny, jeśli chodzi o to, jak wygląda dla użytkownika końcowego. (Formularz używa "GET", więc nazwa pola jest widoczna w adresie URL.)

Zdaję sobie sprawę, że mógłbym po prostu użyć czegoś, np. from_ zamiast tego, ale początkowo sądziłem, że może istnieć jakiś sposób wyraźnego dostarczenia nazwa pola, w takich przypadkach. (np. Podając parametr name='whatever' w konstruktorze pól.) Wyłączyło się there isn't.

Obecnie używam dynamic form generation dostać się wokół kwestii, która nie jest tak źle, ale to jeszcze trochę hack ...

class SearchForm(forms.Form): 
    text = forms.CharField() 
    from_ = forms.DateField() 
    until = forms.DateField() 

    def __init__(self, *args, **kwargs): 
     super(SearchForm, self).__init__(*args, **kwargs) 
     self.fields['from'] = self.fields['from_'] 
     del self.fields['from_'] 

Czy istnieje bardziej elegancki sposób posiadające pole formularza o nazwie from lub inne słowo kluczowe Python?

+0

Zainwestuj słowo? Jestem pewien, że słowa kluczowe są tylko małe. – Delyan

+0

coś podobnego jest ustawić etykietę w __init__ ... http://stackoverflow.com/questions/636905/django-form-set-label – jcfollower

+0

Etykieta jest tekstowy opis, a nie parametr zapytania, który zostanie użyty, więc to nie działa. –

Odpowiedz

4

Nie wymieniaj rzeczy po słowach kluczowych, nawet jeśli znajdziesz jakieś obejście, prawdopodobnie będzie cię później gryźć.

Użyj synonimu lub dodaj przedrostek/sufiks.

E.g.
start ->finish
begin ->end
date_from ->date_to

+7

Zgodziłbym się, gdyby nie to, że powoduje różnicę widoczną dla użytkownika końcowego. Wolałbym nie podejmować decyzji o tym, jak moje adresy URL będą wyglądać dla użytkownika końcowego w oparciu o semantykę języka, którego używam w kodzie zaplecza. –

Powiązane problemy