2

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

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

  • 对于额外的知识,为什么将这两件事分开?

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

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

提前致谢,

4

2 回答 2

2

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

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

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

在运行表单的主要清理方法之前,它会检查每个字段的字段级别清理

于 2012-07-23T09:51:32.290 回答
0

通常,模型代表可能存储在某些持久存储(通常是关系数据库)中的业务实体。表单用于呈现可能从用户那里获取数据的 HTML 表单。

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

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

于 2012-07-23T09:58:45.357 回答