模型和表单验证之间的区别

时间:2012-07-23 09:37:05

标签: python django forms model

我目前正在开发已经构建的模型,我需要添加一些验证管理。 (访问两个字段并检查数据,没什么太戏剧性的)

我想知道在验证的角度来看模型和表单之间的确切区别,以及我是否能够像在模型视图中的表单视图中那样创建一个干净的方法来引发错误?

  • 为了获得额外的知识,为什么两件事分开?

最后,你会做什么?已经有一些为模型编写的方法,我还不知道我是否会重写它以将其变形为一个表单并简单地添加clean()方法+我不知道它们是如何工作的。

哦,一切都在管理界面中,自从我不久前开始使用django以来,还没有很多工作。

提前致谢,

2 个答案:

答案 0 :(得分:0)

您应该使用模型(字段)验证来确保返回的数据类型符合数据库的要求。通常你不需要这个,因为django的内置字段为你做这个,所以除非你已经构建了一些自定义字段或者知道你在做什么,否则你不应该改变它。

表单验证是清理用户输入的地方,您可以通过添加clean_FIELD(self)方法为每个表单字段添加一个干净的方法,例如

class ContactForm(forms.Form):
    # Everything as before.
    ...

    def clean_recipients(self):
        data = self.cleaned_data['recipients']
        if "fred@example.com" not in data:
            raise forms.ValidationError("You have forgotten about Fred!")

        # Always return the cleaned data, whether you have changed it or
        # not.
        return data

在运行Form的主要清理方法之前,它会检查每个字段的字段级别是否清洁

答案 1 :(得分:0)

通常,模型表示可以存储在某个持久存储(通常是关系数据库)中的业务实体。表单用于呈现HTML表单,这些表单可以从用户那里检索数据。

Django支持在模型的基础上创建表单(使用ModelForm类)。表单可用于获取应保存在持久存储中的数据,但不仅如此 - 可以使用表单来获取要在持久存储中搜索的数据或传递给外部服务,提供一些应用程序计数器,测试Web浏览器引擎,根据用户输入的数据(例如“Hello USERNAME”),登录用户等呈现一些文本。

在模型实例上调用save()应该保证只有数据有效才能将数据保存在持久存储中 - 这将在保存到持久存储之前提供一致的数据验证机制,无论是否要保存业务实体用户点击网页或django交互式shell后的“保存我”按钮后,用户将执行模型实例的save()方法。