2010-08-05 111 views
2

我读过Django文档在这里: http://docs.djangoproject.com/en/dev/ref/forms/validation/我需要一些帮助理解Django的形式验证

我也浏览了一些关于谷歌和堆栈溢出的搜索结果,但我一直没能在下面回答我的问题。

举一个例子,假设我有一个名为“Widgets”的模型,其中包含名为“product_name”的CharField。现在说我想将“product_name”中的允许字符限制为[a-zA-Z0-9]加上撇号,破折号和下划线(即' - _),并在用户输入受限字符时向用户显示表单错误。

从上述研究中,我收集到我需要创建一个验证函数来检查这些字符。

我的具体问题:
1.什么是最好的做法是到这样一个验证函数应该活在我的Django项目?
2.我从哪里调用此验证功能?
3.如果输入“坏”字符,我如何向用户显示错误?
4.有人会发布样本验证功能吗?

谢谢,我感谢您可以提供的任何帮助。

回答

2

如果可以,请和Chefsmart一起回答。下面是一个样本验证功能的例子,以帮助它:

class MyCustomInvoiceForm(forms.Form): 
    serial_number = forms.IntegerField(min_value = 1, initial = 1) 
    # Other fields. I am interested in serial_number. 

    def clean_serial_number(self): 
     serial_number = self.cleaned_data.get('serial_number') 
     if not serial_number: 
      return 

     return _my_custom_validation(serial_number) 

    def _my_custom_validation(self, serial_number): 
     serial_number = int(serial_number) 
     if not ((serial_number - 1) % 10 == 0): 
      message = "Serial number should be 1 or one greater than a multiple of 10 (Example: 1, 11, 21 etc.)" 
      raise forms.ValidationError(message) 
     return serial_number 

这是我从一个项目的代码片段。客户需要一些有趣的序列号验证逻辑。