0

我对模型和表单中的验证有几个问题。你能帮我解决这些问题吗:


应该在哪里进行验证?它应该在模型还是表单中?解决这个问题的正确方法是在表单中使用验证器并在模式中使用约束吗?


在表单中编写“clean_”方法和编写验证器有什么区别?我看到人们经常将验证检查放在“clean_”方法中。


在我正在处理的请求中,我在 URL 字符串中有一个名为“alive”的参数。这通常是 1 或 0。在我的表单中定义它的正确方法是什么?我需要验证它是一个数字,并且只能是 1 或 0。这是正确的方法吗?

alive = models.IntegerField(null=False, max_value=1, min_value=0)

如何为该字段定义默认值,即如果未传递此参数,我默认为 0 (False)。

我在客户端没有表格。我正在使用 Django 表单来验证我的 JS POST 请求。


在其中一个模型字段中,我需要以 1234x4321 格式存储屏幕分辨率。我应该将其声明为模型和表单CharField中添加一些正则表达式验证吗?任何正则表达式验证示例都会有所帮助。


谢谢。

4

1 回答 1

1

验证应该在表单上完成,而不是在模型上。但是,如果您使用 ModelForms,这通常很有意义,它会从模型本身继承一些验证规则(那些特定于数据库的验证规则,如最大字段长度、数据库字段类型,以及它们是否可以留空)。

字段的默认值应与其构造函数一起传递:

form = SomeForm(initial={'alive' : 0})

尽管在您的情况下,如果可以获取的值似乎只有零和一,那么使用 aBooleanField代替是有意义的(在这种情况下,它将默认为 false)。

在分辨率的情况下,我会在可能的分辨率和一些任意值之间创建一个映射。

RESOLUTIONS = (                                                
        ("1","800x600"),
        ("2","1024x768"),                            
         .....                        
)   

然后将其传递给模型:

resolutions = models.CharField(RESOLUTIONS, max_length=1)

以便用户获得具有相应选项和值的选择字段。另一方面,如果您需要用户自己插入,使用两个字段(一个用于宽度,另一个用于高度)将比验证用户输入容易得多。

所以你可以为模型定义一个方法:

def get_resolution(self):
    return "%sx%s" % (self.width, self.height)
于 2011-07-01T10:29:26.293 回答