如何在Django中声明一个表单字段,如果它与Python关键字同名?

Tom*_*tie 6 python django

我在Django中有一个简单的表单,看起来像这样:

class SearchForm(forms.Form):
    text = forms.CharField()
    from = forms.DateField()
    until = forms.DateField()
Run Code Online (Sandbox Code Playgroud)

哪个因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_']
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来命名一个表单字段from,或任何其他Python关键字?

Mat*_*ttH 5

不要在关键字之后命名,即使你找到了解决办法,也可能会在以后咬你.

请使用同义词或添加前缀/后缀.

例如
start- > finish
begin- > end
date_from- >date_to

  • 我同意,如果它不是最终用户可见差异的情况.我宁愿不根据我碰巧用于后端代码的语言的语义来决定我的URL对最终用户的看法. (8认同)