如何在Django动态中进行表单验证?

时间:2010-05-27 14:57:44

标签: python django forms

我正在尝试创建一个处理域检查的表单:表单应该基于之前在另一个表单中设置的变量而失败。

基本上,当用户想要创建新域时,如果输入的域存在,则此表单将失败。

当用户想要移动域时,如果输入的域不存在,则此表单将失败。

我试过让init动态重载,但看不到让我传递varbele到clean函数的方法。

我已经读过这个动态验证可以使用工厂方法完成,但也许有人可以帮我解决这个问题吗?

到目前为止,这是表单的简化版本:

#OrderFormStep1 presents the user with a choice: create or move domain

class OrderFormStep2(forms.Form):

    domain = forms.CharField() 
    extension = forms.CharField() 

    def clean(self):
       cleaned_data = self.cleaned_data
       domain = cleaned_data.get("domain")
       extension = cleaned_data.get("extension")

       if domain and extension:

       code = whoislookup(domain+extension);

       #Raise error based on result from OrderFormStep1
       #raise forms.ValidationError('error, domain already exists')
     #raise forms.ValidationError('error, domain does not exist')

       return cleaned_data

2 个答案:

答案 0 :(得分:1)

覆盖__init__是可行的方法。在该方法中,您只需将值设置为实例变量即可。

def __init__(self, *args, **kwargs):
    self.myvalue = kwargs.pop('myvalue')
    super(MyForm, self).__init__(*args, **kwargs)

现在self.myvalue可以任何形式提供。

答案 1 :(得分:0)

您是否有存储域名的模型?如果是这样,您希望使用ModelForm并在模型中存储实际域的任何字段上设置unique = True。从Django 1.2开始,您甚至可以在模型中进行任何其他验证,而不是表单。