简体   繁体   中英

Half Hours choice fields for TimeField in Django model

I want to have field choice in form that user can pick hours with half hours choice. I have this model and this TimeField :

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

I want to show half hours time to customer. This is my 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'),
)

But When I want to save object, the form not validate and raise error: Choose a valid option. How can I fix this error?

For TimeField it is more preferred to set choices in Form rather than in the model.

Check this answer on setting time choices in form using custom Select widget (rather than forms.TimeField ).

Also, format of TIME_MAP_HALF_HOURS_CHOICES suggests it to be used with forms field choices (cause it contains value - representation tuples), not with model field choices (which uses key - value tuples). This may result in the error. Also, time representation does not seem like a model concern - it may have list of allowed datetime.time objects, but how to represent these values - views and forms can decide better.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM