我有一个包含持续时间字段的 Django 模型:
class Entry(models.Model):
duration = models.DurationField()
我想使用 ModelForm 为这个模型渲染一个表单:
class EditEntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['duration']
这一切都在起作用。但是,如果编辑现有模型,则文本框中呈现的持续时间的格式为
HH:MM:SS
我永远不会处理超过一个小时的持续时间。如何更改 Django 将表单中的该字段格式化为
MM:SS
?我在渲染模型时已经使用了一个自定义模板过滤器,我只是不知道如何更改表单的渲染方式。
谢谢
最佳答案
您应该能够通过为该字段提供自定义小部件来做到这一点:
from django.forms.widgets import TextInput
from django.utils.dateparse import parse_duration
class DurationInput(TextInput):
def _format_value(self, value):
duration = parse_duration(value)
seconds = duration.seconds
minutes = seconds // 60
seconds = seconds % 60
minutes = minutes % 60
return '{:02d}:{:02d}'.format(minutes, seconds)
然后您在字段上指定此小部件:
class EditEntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['duration']
widgets = {
'duration': DurationInput()
}
当然,如果您确实提供超过一个小时的持续时间,这会导致奇怪...
关于django - ModelForm 中的 DurationField 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078366/