模型验证。不想重复自己。 Django的

时间:2011-09-25 05:43:43

标签: django validation model

我的模型M有一个字段num=models.IntegerField()
我有一个名为F的模型形式M 我想确保num永远不会消极。

如果我在表单类F中进行验证,那么我可以执行clean_num(): 如果为负,则抛出ValidationError('Num can never be negative')。 此ValidationError将自动重新显示给用户 将他重定向回到他提交和显示的表格 num字段顶部的'Num永远不会消极'消息。 这一切都是由django在我扔掉后自动完成的 来自ValidationError方法的clean_fieldname

我希望能够做到这一切,但在模型类中。

F是从模型类ModelForm创建的MM定义了这一点 字段num永远不会消极。

当我在表单上调用is_valid()时,我想要在模型中定义的函数 检查引用此模型的任何ModelForm的验证。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:1)

请参阅Model validation(仅限Django 1.2+)。

答案 1 :(得分:1)

您还可以使用PositiveIntegerField来解决此特定问题。

如果您的验证仅取决于字段值,则可以按照此处所述实现您自己的字段类型:https://docs.djangoproject.com/en/dev/howto/custom-model-fields/

答案 2 :(得分:1)

感谢所有发布回答的人。但如果你有兴趣,我发现了我所问的问题:

您只需为模型定义一次合适的验证器即可。使用此模型的所有表单都将ValidationError('不能使用此名称')附加到其field_name.errors列表中。

请注意,它们将以运行模型字段验证程序的形式添加到字段中。

无论如何,请检查一下:

Django: how to cleanup form fields and avoid code duplication