覆盖Django表单字段的名称attr
我建立了一个Django表单,该表单提交到另一个域(我不控制)上的页面。我的想法是,我有一个样式优美,生成得很好的表单,可以很好地适合我自己的网站,并且在提交用户时将用户带到其他地方。
然而,
- 如果其他表单更改了其任何字段的名称,则我需要更改表单中的字段名称,然后在应用程序中的其他位置更改这些名称-因为
name
attr与用于该属性的属性的名称相关联领域。 - 如果远程表单使用愚蠢的名称,那么我的表单对象还必须具有带有愚蠢名称的属性,这会污染我的应用程序的代码。
- 如果这些名称恰巧是Python中的保留字(例如
from
),那么很难或不可能创建Django表单对象表示形式。显示字段时,是否有办法指定用于’name’属性的其他字符串?因此,将HTML表单与表示它的类分离。
这将需要两个组件:
- 覆盖小部件中的名称值
- 使表单在绑定时从request.POST读取此值
在这种情况下,我只需要第1步,但是第2步与解决上面列出的问题有关
回答:
这是对API的一种非常可怕的滥用,但是有一个名为form的方法add_prefix
被调用来确定每个字段的HTML名称,并考虑到表单的前缀(如果有)。你可以重写它,以便它在某个地方的字典中查找字段名称并返回你想要的名称-不要忘记保留现有的前缀行为:
FIELD_NAME_MAPPING = { 'field1': 'html_field1',
'field2': 'html_field2'
}
class MyForm(forms.ModelForm):
def add_prefix(self, field_name):
# look up field name; return original if not found
field_name = FIELD_NAME_MAPPING.get(field_name, field_name)
return super(MyForm, self).add_prefix(field_name)
以上是 覆盖Django表单字段的名称attr 的全部内容, 来源链接: utcz.com/qa/419158.html