Как объявить поле формы в Django, если оно имеет то же имя, что и ключевое слово Python? - PullRequest
6 голосов
/ 14 октября 2011

У меня есть простая форма в Django, которая выглядит примерно так:

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

Что не получается с SyntaxError, потому что from является ключевым словом Python.

Я скорее не изменяю название поля; Он подходит лучше, чем любая из альтернатив, и мне не терпится, как он выглядит для конечного пользователя. (Форма использует «GET», поэтому имя поля отображается в URL.)

Я понимаю, что вместо этого я мог бы просто использовать что-то вроде from_, но сначала я думал, что может быть какой-то способ явно указать имя поля для подобных случаев. (Например, предоставив параметр name='whatever' в конструкторе Field.) Получается, что нет .

В настоящее время я использую динамическое генерирование форм , чтобы обойти эту проблему, что не так уж и плохо, но все равно немного взломано ...

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_']

Есть ли более элегантный способ иметь поле формы с именем from или любое другое ключевое слово Python?

1 Ответ

5 голосов
/ 14 октября 2011

Не называйте вещи после ключевых слов, даже если вы найдете обходной путь, он, вероятно, в конечном итоге укусит вас позже.

Используйте синоним или добавьте вместо него префикс / суффикс.

Например
start -> finish
begin -> end
date_from -> date_to

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...