如何在Django中拆分表单字段以显示多个值

时间:2020-10-09 05:54:59

标签: django modelform multivalue django-multiwidget

“我的旅程”模型包含两个字段,距离和时间:

class Journey(models.Model):
    distance = models.PositiveIntegerField(default=0)
    time = models.PositiveIntegerField(default=0)

我正在尝试创建一个Modelform,其中时间字段将被拆分以显示“ hrs”,“ min”和“ sec”的输入。然后,我希望压缩这些值以返回一个单个值。目前,我的forms.py看起来像这样:

from django import forms
from django.forms import MultiWidget
from .models import Journey


class DistanceTimeModelForm(forms.ModelForm):
    time = forms.MultiValueField(
        widget=MultiWidget(
            widgets=[
                forms.IntegerField(attrs={"placeholder": "hrs"}),
                forms.IntegerField(attrs={"placeholder": "min"}),
                forms.IntegerField(attrs={"placeholder": "sec"}),
            ]
        ),
        require_all_fields=True,
        error_messages={"incomplete": "Please enter a number"},
    )

    class Meta:
        model = Journey
        fields = ["distance", "time"]

当我尝试运行服务器时,我收到TypeError: __init__() got an unexpected keyword argument 'attrs'。有谁能够帮助我了解如何解决此问题?我已经在网上寻找解决方案已有一段时间了,但到目前为止还是很困惑。

1 个答案:

答案 0 :(得分:1)

您可以改为创建DurationField:

class Journey(models.Model):
    distance = models.PositiveIntegerField(default=0)
    time = models.DurationField()

class DistanceTimeModelForm(forms.ModelForm):
    class Meta:
        model = Journey
        fields = ["distance", "time"]