【问题标题】:I need some help understand Django form validators我需要一些帮助来理解 Django 表单验证器
【发布时间】:2011-03-25 15:10:17
【问题描述】:

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

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

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

从上述研究中,我了解到我需要在某处创建一个验证函数来检查这些字符。

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

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

【问题讨论】:

    标签: django validation forms


    【解决方案1】:

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

    这是我做的一个项目的一个sn-p代码。客户需要一些有趣的序列号验证逻辑。

    【讨论】:

      【解决方案2】:

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

      对于您的情况,这将是最干净的方法。

      【讨论】:

        猜你喜欢
        • 2012-02-17
        • 2020-08-06
        • 2012-01-05
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 2012-02-10
        • 2012-02-02
        • 2016-02-10
        相关资源
        最近更新 更多