Как разделить поле формы для отображения нескольких значений в Django

Модель My Journey содержит два поля: расстояние и время:

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

Я пытаюсь создать модель, в которой поле времени будет разделено для отображения входных данных для "часов", "мин" и "сек". Затем я хотел бы, чтобы эти значения были сжаты, чтобы вернуть одно значение. В настоящее время мой 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 ответ

Решение

Вместо этого вы можете попробовать создать DurationField:

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

class DistanceTimeModelForm(forms.ModelForm):
    class Meta:
        model = Journey
        fields = ["distance", "time"]
Другие вопросы по тегам