2011-09-25 45 views
1

我有一个模型M,它有一个字段num=models.IntegerField()
我有一个模型M模型F
我想确保数字永远不会消极。模型验证。不想重复自己。 Django

如果我在窗体类,F做验证,那么我就可以做clean_num(): 如果为负则抛出ValidationError('Num can never be negative')。 这ValidationError将自动重新显示给用户由 重定向他回到他提交的形式,并显示 'Num永远不会是负面的'消息顶部的num字段。 这一切都由django自动完成,只要我从clean_fieldname方法抛出 ValidationError

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

F是从模型类M创建的ModelFormM定义 字段num永远不能为负。

当我在窗体上调用is_valid()时,我希望 模型中定义的函数检查引用此模型的任何ModelForm的验证。

我该如何做到这一点?

回答

1

您也可以使用PositiveIntegerField来解决这个问题。

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

+0

注意,积极=非负! – wRAR

+0

在django中,''PositiveIntegerField''也可以包含零值,因为它在数据库级别实现为''unsigned int''。这也在这里讨论:http://stackoverflow.com/questions/2248617/0-value-in-django-positiveintegerfield – dragoon

1

谢谢大家谁张贴解答。但是我发现到底是什么,所以如果你有兴趣:

你可以为模型定义恰当的验证器。所有使用此模型的表单都会将ValidationError('不能使用此名称')附加到它们的field_name.errors列表中。

请注意,它们将被添加到模型字段验证程序正在运行的窗体中的字段中。

无论如何,检查了这一点:

Django: how to cleanup form fields and avoid code duplication