如何预处理传递给CreateView的值

时间:2016-07-25 19:26:20

标签: python django django-models django-forms django-views

我想预处理提交给CreateView的值,以便对其进行验证。例如,在表单中输入字符串的自定义int-parser。

在我的情况下,我想转换以CreateView形式输入的字符串,如" 1:54.363"到一个整数(带有现有函数parse_laptime),然后保存在我的模型中:

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

如何最好地完成这项工作?我是Django的新手,并尝试使用带有覆盖clean方法的自定义表单,但该字段事先未通过验证,因此未传递给clean()

2 个答案:

答案 0 :(得分:1)

我认为您在使用表单验证数据方面走在正确的轨道上。但是,您的输入未通过验证测试,因为输入数据(格式化为时间值)不是模型所需的整数。

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

答案 1 :(得分:1)

Laptime是时间,如果您希望用户以“1:54.363”格式输入,则使用的正确字段为TimeField

  

验证给定值是datetime.time还是字符串   格式化为特定时间格式

您似乎将它们以微秒的形式存储在数据库中。然后,您需要检查form.is_valid()方法并使用日期时间函数或拆分和算术进行转换。