你如何在Django中以2种格式输入时间?

时间:2017-11-15 10:35:35

标签: python django

我希望用户能够以decimals输入时间:

8.25

time

8:15

我应该使用什么Django FormField?

我的想法是forms.CharField(),因为它会删除HTML限制,而forms.TimeField()会创建相同的输入。

应该将哪些验证器应用于该表单域?

我不确定是否需要创建自定义验证器。

2 个答案:

答案 0 :(得分:0)

我会在CharField方法中使用clean_fieldname自定义验证:

class TimeForm(forms.Form):
    user_time = forms.CharField()

    def clean_time_field(self):
        user_time = self.cleaned_data['user_time']
        if '.' in user_time:
            hours, minutes = user_time.split('.')
        elif ':' in user_time:
            hours, minutes = user_time.split(':')
        else:
            raise ValidationError('Provide correct time')
        return datetime.time(hour=hours, minute=minutes)

答案 1 :(得分:0)

有许多可能的方法,其中最好的方法取决于项目中的许多其他方法。

如何在数据库中节省时间?你使用models.TimeField()吗?你是否正规化 - 保存值models.DecimalField()

您可以在模板中使用JavaScript吗?如果是,我会使用允许用户交互的动态表单。也许是这样的:

<label for="timeformat_switcher"
<input type="checkbox" id="timeformat_switcher">Enter a decimal value
</label>

<input type="time" id="time">
<input type="number" id="number"><!-- make it per default in CSS hidden -->

当用户选中该复选框时,使用JavaScript隐藏<input type="time">并取消隐藏<input type="number">。 还可以使用JavaScript将十进制值转换为时间并将其发送到服务器。