我需要一些帮助来理解Django形式验证器

时间:2010-08-05 05:42:03

标签: django validation forms

我在这里阅读了Django文档: http://docs.djangoproject.com/en/dev/ref/forms/validation/

我还浏览过Google和Stack Overflow上的一些搜索结果,但我无法在下面回答我的问题。

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

从上面的研究中,我认为我需要在某处创建一个验证函数来检查这些字符。

我的具体问题:
 1.关于这样的验证函数应该存在于我的Django项目中的最佳实践是什么?  2.我从哪里调用此验证功能?
 3.如果输入“坏”字符,如何向用户显示错误?
 4.有人会非常友好地发布样本验证功能吗?

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

2 个答案:

答案 0 :(得分:3)

如果可以,请使用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

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

答案 1 :(得分:2)

如果您使用的是Django表单,则可以选择使用RegexField作为product_name字段。见http://docs.djangoproject.com/en/1.2/ref/forms/fields/#regexfield

这对你的情况来说是最干净的方法。