@shutovds

Почему не удается получить валидные данные из Django MultiValueField?

Добрый день! Осваиваю Django, в форме хочу использовать MultiValueField для ввода времени.
Сначала создаю TimeWidget(MultiWidget), затем TimeField(MultiValueField)
class TimeWidget(MultiWidget):
    def __init__(self, h_choices, m_choices, attrs=None):
        widgets = [Select(choices=h_choices),
                   Select(choices=m_choices)]
        super(TimeWidget, self).__init__(widgets, attrs)

    def decompress(self, value):
        if value:
            return [value.hours, value.minutes]
        else:
            return ['', '']


class TimeField(MultiValueField):
    def __init__(self, h_choices, m_choices, *args, **kwargs):
        list_fields = [ChoiceField(),
                       ChoiceField()]
        super(TimeField, self).__init__(list_fields, widget=TimeWidget(h_choices, m_choices))


    def compress(self, values):
        return (values[0] + ':' + values[1])


После этого использую все это в форме:
HOURS_CHOICES = [(str(x), x) for x in range(0, 24)]
    MINUTES_CHOICES = [(0, 0), (10, 10), (20, 20), (30, 30), (40, 40), (50, 50), ]
    time = TimeField(h_choices=HOURS_CHOICES, m_choices=MINUTES_CHOICES)

В результате форма создается, данные во view передаются, но форма по данному полю невалидна.
В моделе поле имеет вид:
time = models.TimeField()
Предполагаю, что проблема в def compress()
Открыл class MultiValueField(Field), посмотрел:
def compress(self, data_list):
        """
        Return a single value for the given list of values. The values can be
        assumed to be valid.

        For example, if this MultiValueField was instantiated with
        fields=(DateField(), TimeField()), this might return a datetime
        object created by combining the date and time in data_list.
        """
        raise NotImplementedError('Subclasses must implement this method.')

Может ли кто подсказать в чем ошибка? И как правильно?
  • Вопрос задан
  • 32 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
15 авг. 2018, в 07:40
120000 руб./в месяц
15 авг. 2018, в 07:34
98000 руб./в месяц
15 авг. 2018, в 07:30
100000 руб./в месяц