2010-05-27 38 views
0

我试图做一个窗体来处理域的检查:窗体应该失败的基础上在另一个窗体中设置的变量。如何使Django中的表单验证动态?

基本上,当用户想要创建一个新的领域,这种形式应该如果输入的域名存在失败。

当用户想移动某个域,这种形式应该如果输入的域不存在失败。

我试图使它的动态超载init却不见一个办法让我通过variabele的清洁功能。

我读过这个动态验证可以使用工厂方法来完成,但也许有人可以帮助我在我的这种方式?

这里是形式的简化版本至今:

#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 

回答

1

重写__init__是要走的路。在该方法中,您可以简单地将您的值设置为实例变量。

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

现在self.myvalue有任何形式的方法。

0

你有存储域的模型?如果是这样,你想使用ModelForm并设置唯一= True在任何字段存储模型中的实际域。从Django 1.2开始,你甚至可以在模型中做任何额外的验证,而不是表单。

+0

不,后面没有模型,完全依赖于用户输入和whois检查(服务器请求给第三方)。 我可以在表格的范围之外解决这个问题很容易,但它似乎更整洁,以便能够从窗体本身引发的错误.. – Oli 2010-05-27 15:04:52

+0

不,如果你没有一个模型,有没有必要引进一个只为这个。就我而言,这只是一个糟糕的假设。 – Tom 2010-05-27 18:40:12