Django,验证表单
Posted
技术标签:
【中文标题】Django,验证表单【英文标题】:Django, validating Form 【发布时间】:2011-01-19 10:09:10 【问题描述】:我希望我的表单是动态的,一些参数如 IntegerField 的 max_length 因模型而异。通过使用来自here 的信息,我写了这个表格:
def my_form(inputname, inputlastname, inputamount):
class MyForm(forms.Form):
name = forms.CharField(max_length=50,required=True,initial=inputname)
lastname = forms.CharField(max_length=50, required=True,initial=inputlastname)
amount= forms.IntegerField(max_value=inputamount, required=True)
return MyForm
当我这样调用它并传递给模板时,它在模板上渲染得很好:
form = my_form("David","Bowie",4)()
但是我不知道如何验证它,这失败了:
如果 request.method == 'POST': 表单 = MyForm(request.POST) 如果 form.is_valid()
【问题讨论】:
【参考方案1】:没有理由这样做。你让事情变得不必要地复杂了。
不要将初始值传递给工厂函数,该函数返回具有预定义的类,而是在表单定义中省略初始参数,并在表单实例化期间传递它们:
class MyForm(forms.Form):
name = forms.CharField(max_length=50,required=True)
lastname = forms.CharField(max_length=50, required=True)
...
form = MyForm(request.POST, initial='firstname':myfirstname, 'surname':mysurname)
附加问题后编辑
为了有一个动态的max_value
用于金额,您可以覆盖表单的__init__
方法并将其设置在那里。然后再一次在实例化时传递值。
class MyForm(forms.Form):
name = forms.CharField(max_length=50,required=True)
lastname = forms.CharField(max_length=50, required=True)
amount = forms.IntegerField(required=True)
def __init__(self, *args, **kwargs):
amount_max = kwargs.pop('amount_max', None)
super(MyForm, self).__init__(*args, **kwargs)
if amount_max:
self.fields['amount'].max_value = amount_max
...
form = MyForm(request.POST, amount_max=10,
initial='firstname':myfirstname, 'surname':mysurname)
【讨论】:
非常感谢丹尼尔!我刚从你那里学到这个!我刚刚更新了我的问题以添加 IntegerField。如果您还包括金额的 max_value 示例,我将不胜感激。谢谢! 哇,谢谢丹尼尔!你在这方面的帮助对我来说真的很重要:)以上是关于Django,验证表单的主要内容,如果未能解决你的问题,请参考以下文章