Поля выбора часов для TimeField в модели Django - PullRequest
1 голос
/ 04 мая 2020

Я хочу выбрать поле в форме, чтобы пользователь мог выбрать часы с полчаса. У меня есть эта модель и эта TimeField:

class Sample:
   start_time = models.TimeField(choices=global_vars.TIME_MAP_HALF_HOURS_CHOICES,)

Я хочу показать клиенту полчаса. Это мой выбор:

TIME_MAP_HALF_HOURS_CHOICES = (
    (datetime.time(00, 00, 00), '00:00'),
    (datetime.time(00, 30, 00), '00:30'),
    (datetime.time(1, 00, 00), '01:00'),
    (datetime.time(1, 30, 00), '01:30'),
    (datetime.time(2, 00, 00), '02:00'),
    (datetime.time(2, 30, 00), '02:30'),
    (datetime.time(3, 00, 00), '03:00'),
    (datetime.time(3, 30, 00), '03:30'),
    (datetime.time(4, 00, 00), '04:00'),
    (datetime.time(4, 30, 00), '04:30'),
    (datetime.time(5, 00, 00), '05:00'),
    (datetime.time(5, 30, 00), '05:30'),
    (datetime.time(6, 00, 00), '06:00'),
    (datetime.time(6, 30, 00), '06:30'),
    (datetime.time(7, 00, 00), '07:00'),
    (datetime.time(7, 30, 00), '07:30'),
    (datetime.time(8, 00, 00), '08:00'),
    (datetime.time(8, 30, 00), '08:30'),
    (datetime.time(9, 00, 00), '09:00'),
    (datetime.time(9, 30, 00), '09:30'),
    (datetime.time(10, 00, 00), '10:00'),
    (datetime.time(10, 30, 00), '10:30'),
    (datetime.time(11, 00, 00), '11:00'),
    (datetime.time(11, 30, 00), '11:30'),
    (datetime.time(12, 00, 00), '12:00'),
)

Но когда я хочу сохранить объект, форма не проверяется и выдает ошибку: Choose a valid option. Как я могу исправить эту ошибку‌?

1 Ответ

1 голос
/ 04 мая 2020

Для TimeField предпочтительнее установить выбор в Form, а не в модели.

Проверить этот ответ при настройке выбора времени в форме с использованием пользовательского Select widget (вместо forms.TimeField).

Кроме того, формат TIME_MAP_HALF_HOURS_CHOICES предлагает использовать его с forms вариантами выбора полей (поскольку он содержит value - representation кортежи), а не с model выбор полей (который использует key - value кортежи). Это может привести к ошибке. Кроме того, представление времени не похоже на проблему модели - оно может иметь список разрешенных объектов datetime.time, но как представлять эти значения - представления и формы могут быть лучше решены.

...