我想预处理提交给CreateView
的值,以便对其进行验证。例如,在表单中输入字符串的自定义int-parser。
在我的情况下,我想转换以CreateView
形式输入的字符串,如" 1:54.363"到一个整数(带有现有函数parse_laptime
),然后保存在我的模型中:
class Lap(models.Model):
laptime = models.IntegerField(default=0)
如何最好地完成这项工作?我是Django的新手,并尝试使用带有覆盖clean
方法的自定义表单,但该字段事先未通过验证,因此未传递给clean()
。
答案 0 :(得分:1)
我认为您在使用表单验证数据方面走在正确的轨道上。但是,您的输入未通过验证测试,因为输入数据(格式化为时间值)不是模型所需的整数。
您应该使用表单(或未绑定的表单)中的未绑定字段来接受输入的数据 - 可能是字符字段。然后,对此未绑定字段使用clean方法以确认可以转换数据(基于格式和/或值)。实际的转换应该在视图逻辑中进行,也许在form_valid()方法中进行。
答案 1 :(得分:1)
Laptime是时间,如果您希望用户以“1:54.363”格式输入,则使用的正确字段为TimeField
验证给定值是datetime.time还是字符串 格式化为特定时间格式
您似乎将它们以微秒的形式存储在数据库中。然后,您需要检查form.is_valid()方法并使用日期时间函数或拆分和算术进行转换。