我的应用程序处理记录时间。在模型中,它将时间段存储为整数分钟。在前端,我希望用户能够输入整数分钟,十进制小时(例如1.5 = 90分钟)或小时和分钟(例如01:30 = 90分钟)的时间。我还希望表单以用户首选格式显示字段值(可以在配置文件模块中设置)。
我已经设置了一个模板过滤器,它取决于用户的偏好,并在显示页面上显示每个条目的相应格式(在上下文中发送并通过模板标签格式化程序提供),但我想做同样的事情。表格 - 即以适当的格式显示表格价值,并允许用户以三种不同的格式输入时间。
以下是我所拥有的概要,该模型允许用户为系统中的各个字段设置开始状态:
models.py:
class PreviousHours(models.Model):
user = models.OneToOneField(User)
logged_minutes_1 = models.PositiveIntegerField(default=0)
logged_minutes_2 = models.PositiveIntegerField(default=0)
logged_minutes_3 = models.PositiveIntegerField(default=0)
...
forms.py:
class PreviousHoursForm(forms.ModelForm):
class Meta:
model = PreviousHours
exclude = ('user')
要将整数分钟转换为适当的格式,我有format_minutes
方法,根据需要调用minutes_to_decimal_hours
或minutes_to_hhmm
。这些返回适当格式化的时间,或者如果minutes = 0,则返回空字符串。我也有一些方法,它接受一个字符串,用正则表达式检查它的格式,并将分钟作为整数返回,如果格式错误则抛出异常。
我已经在模板中手动创建了表单布局,因为它非常具体,因此我目前正在使用{{ form.logged_minutes_1 }}
样式条目来适当地呈现输入框。
我是否需要创建新的表单小部件才能执行此操作?还是有另一种方法吗?我并不完全确定最佳方法。