我在这里阅读了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.有人会非常友好地发布样本验证功能吗?
谢谢,感谢您提供的任何帮助。
答案 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
这对你的情况来说是最干净的方法。