我有一个在 Django 中创建动态表单的简单要求 - 我已经看过很多示例,但它们似乎不完整,或者需要比我更广泛的 Python 和 Django 知识!没有显示如何调用示例的动态部分:
这是带有 Q1 和 Q2 的表单类 - 我在表单上放置一个按钮来添加另一个
字段称为 Q3 - 如果再次按下,则称为 Q4:我想我得到了init功能半正确:
class testform(forms.Form):
Q1 = forms.CharField()
Q2 = forms.CharField()
def __init__(self, *args, **kwargs):
super(testform,self).__init__(*args,**kwargs)
self.fields['Q%s'%i] = forms.CharField(label='Q%i' % i)
我想在表单上放置一个按钮来添加另一个
如果再次按下,字段称为 Q3,然后称为 Q4。
- 我如何称呼 _init_function 从视图中添加这些字段?
- 如果我使用Javascript动态添加字段,我该如何调用init这样我在发布表单时就可以正确地使用 Django 进行验证?
回答你的问题:每当你初始化表单时,它都会调用init(). Ex: form = testform()
。这会初始化您的表单。我在这里要做的是添加一些 javascript 来创建这些新字段。我不确定您对 javascript 有多熟悉,但我假设您可以自己解决这个问题。
至于验证,可以通过表单来完成。首先,您需要告诉它您已经使用以下命令添加了更多字段init()
.
class TestCharField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TestCharField, self).__init__(*args, **kwargs) # Needs * and **
def clean(self, value):
super(TestCharField, self).clean(value)
# Do custom validation in here
return value
class testform(forms.Form):
def __init__(self, *args, **kwargs):
super(testform, self).__init__(args, kwargs)
# args should be a list with the single QueryDict (GET or POST dict)
# that you passed it
for k,v in args[0].items():
if k.startswith('Q') and k not in self.fields.keys():
self.fields[k] = TestCharField(initial=v, required=True)
您可以将字段命名为任何您想要的名称,不必是 TestCharField。只要确保在两个地方都重命名即可。这将允许您创建任意数量的字段。如果这不太适合您,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)