django - ModelForm 中的 DurationField 格式

标签 django django-forms

我有一个包含持续时间字段的 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/

相关文章:

python - 协议(protocol)错误,得到 "H"作为回复类型字节

django - 用户输入的链接在 Django 中显示为文本

python - 如何从 django forms.Form 中排除字段?

python - clean_data 何时填充到 Django 中

django-parler 不在管理员中显示标签

ruby-on-rails - 嵌入式网络服务器环境中的 Django 或 Ruby on Rails?

python - 在 DefaultUserCreationForm 的模板中显示错误消息 - django

django-forms - 如何根据Django中formset_factory的要求设置每个字段(如何验证表单集中的空白表单)

python - 手动设置models.DateTimeField

ios - 在 Django + iOS 兼容性中创建站点 - 这是一个好方法吗?