如果表单字段与Python关键字同名,如何在Django中声明表单字段?
我在Django中有一个简单的表单,看起来像这样:如果表单字段与Python关键字同名,如何在Django中声明表单字段?,python,django,Python,Django,我在Django中有一个简单的表单,看起来像这样: class SearchForm(forms.Form): text = forms.CharField() from = forms.DateField() until = forms.DateField() 因为from是一个Python关键字,所以它会因语法错误而失败 我宁愿不改变这个领域的名称;它比任何替代品都更适合,我对它在最终用户眼中的表现非常挑剔。(表单使用“GET”,因此字段名在URL中可见。) 我意识
class SearchForm(forms.Form):
text = forms.CharField()
from = forms.DateField()
until = forms.DateField()
因为from
是一个Python关键字,所以它会因语法错误而失败
我宁愿不改变这个领域的名称;它比任何替代品都更适合,我对它在最终用户眼中的表现非常挑剔。(表单使用“GET”,因此字段名在URL中可见。)
我意识到我可以使用一些东西,比如从中选择,但我最初认为可能有某种方法可以显式地提供字段名,用于此类情况。(例如,通过在字段构造函数中提供一个name='which'
参数)结果是
目前,我习惯于绕开这个问题,这还不算太糟糕,但这仍然是一个有点黑客
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_']
有没有更优雅的方法让表单字段名为来自
,或者任何其他Python关键字?不要用关键字来命名,即使你找到了解决方法,它以后也可能会咬你
使用同义词或添加前缀/后缀
例如开始
->完成
开始
->结束
date\u from
->date\u to
将单词大写?我很确定关键字是小写的。类似的是在初始化中设置标签。。。标签是文本描述,而不是使用的查询参数,所以这并不能解决问题。所以问题假设您使用form action=GET?我认为添加一个带有http表单字段名的额外字段参数将是form field类的一个很好的新功能。如果不是这样的话,我同意这会给最终用户带来明显的不同。我不希望根据我恰好用于后端代码的语言的语义来决定最终用户对我的URL的看法。