我希望用户能够以decimals
输入时间:
8.25
和time
:
8:15
我应该使用什么Django FormField?
我的想法是forms.CharField()
,因为它会删除HTML限制,而forms.TimeField()
会创建相同的输入。
应该将哪些验证器应用于该表单域?
我不确定是否需要创建自定义验证器。
答案 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将十进制值转换为时间并将其发送到服务器。