如何在Django中声明一个与Python关键字同名的表单字段?
我在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