我想预处理提交给CreateView的值,以使它们得到验证。例如,用于在表单中输入的字符串的自定义int解析器。

在我的情况下,我想将以CreateView形式输入的字符串(如“ 1:54.363”)转换为整数(具有现有函数parse_laptime),然后将其保存在模型中:

class Lap(models.Model):
    laptime = models.IntegerField(default=0)


如何做到最好?我是Django的新手,并尝试使用具有覆盖的clean方法的自定义Form,但是该字段事先未通过验证,因此不会传递给clean()

最佳答案

我认为您在使用表格验证数据方面走了正确的路。但是,您的输入未能通过验证测试,这仅是因为以时间值格式格式化的输入数据不是模型所需的整数。

您应使用接受输入数据的表单(或未绑定表单)中的未绑定字段-可能用作字符字段。然后,对此未绑定字段使用clean方法,以确认可以转换数据(基于格式和/或值)。实际的转换应在视图逻辑中进行,也许在form_valid()方法中进行。

10-06 06:30