【问题标题】:How to split a form field to display multiple values in Django如何拆分表单字段以在 Django 中显示多个值
【发布时间】:2021-01-24 05:10:21
【问题描述】:

My Journey 模型包含两个字段,距离和时间:

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

我正在尝试创建一个 Modelform,其中时间字段将被拆分以显示“小时”、“分钟”和“秒”的输入。然后,我希望压缩这些值以返回一个值。目前我的 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'。有谁可以帮助我了解如何解决这个问题?我一直在网上寻找解决方案,但到目前为止仍然很困惑。

【问题讨论】:

    标签: django modelform multivalue django-multiwidget


    【解决方案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"]
    

    【讨论】:

    • 谢谢,这肯定会改善我的输出,尽管它仍然只允许用户以秒为单位输入他们的时间。我希望他们在一个字段中有三个输入框,分别代表“小时”、“分钟”和“秒”
    • 您可以使用此持续时间小部件pypi.org/project/django-durationwidget
    猜你喜欢
    • 2023-03-06
    • 2019-12-08
    • 2011-01-15
    • 1970-01-01
    • 2011-10-11
    • 2020-03-09
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多