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

6 投票
1 回答
1539 浏览
提问于 2025-04-17 04:19

我在Django里做了一个简单的表单,长得像这样:

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

但是它出现了语法错误,因为 from 是Python的一个关键字。

我不想改这个字段的名字;这个名字比其他任何替代选项都更合适,而且我对用户看到的样子很讲究。(这个表单使用的是'GET',所以字段名会显示在网址里。)

我知道我可以用 from_ 这样的名字来代替,但我最开始想,是否有办法明确指定字段名,像这种情况。(比如,在字段构造函数里提供一个 name='whatever' 的参数。)结果发现 并没有

目前我在用 动态表单生成 来解决这个问题,这样也还不错,但还是有点像是变通的办法……

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 个回答

6

不要用关键字来命名东西,即使你找到了解决办法,后面可能会给你带来麻烦。

可以用同义词,或者加个前缀或后缀来替代。

比如:
start 可以改成 finish
begin 可以改成 end
date_from 可以改成 date_to

撰写回答