ModelForm中的DurationField格式

Mic*_*elM 6 django django-forms

我有一个包含持续时间字段的Django模型:

class Entry(models.Model):
    duration = models.DurationField()
Run Code Online (Sandbox Code Playgroud)

我想使用ModelForm为这个模型渲染一个表单:

class EditEntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['duration']
Run Code Online (Sandbox Code Playgroud)

这一切都有效.但是,如果编辑现有模型,则在文本框中呈现的持续时间具有格式HH:MM:SS

我将永远不会处理一个多小时的持续时间.如何更改Django在表单中格式化此字段的方式MM:SS?

我在渲染模型时已经使用了自定义模板过滤器,我无法弄清楚如何更改表单的呈现方式.

谢谢

sol*_*oke 6

您应该可以通过为该字段提供自定义窗口小部件来执行此操作:

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)
Run Code Online (Sandbox Code Playgroud)

然后在字段上指定此小部件:

class EditEntryForm(forms.ModelForm):
    class Meta:
        model = Entry
        fields = ['duration']
        widgets = {
            'duration': DurationInput()
        }
Run Code Online (Sandbox Code Playgroud)

当然,如果您提供超过一小时的持续时间,这将导致奇怪...