On Wed, Jun 24, 2009 at 3:57 PM, adrian <adrian...@gmail.com> wrote:

>
>
> I need a time field that can be None.
>
> I define the field so that Null is legal in the DB:
>
> time_end = models.TimeField(blank=True, null=True)
>
> The form field is:
>
> time_end = forms.ChoiceField(required=False, choices=END_TIME_CHOICES)
>
> and END_TIME_CHOICES is:
>
> END_TIME_CHOICES = (
>    (None, 'End Time Unknown'),
>    (datetime.time(0,0), '12:00 Midnight'),
>    (datetime.time(0,30), '12:30 AM'),
>    (datetime.time(1,0), '1:00 AM'),
>    (datetime.time(1,30), '1:30 AM'),
>  etc,
> )
>
> My question is why does this field give a validation error when None
> is selected, saying:
>
> ValidationError at /event/add_event/
>
> Enter a valid time in HH:MM[:ss[.uuuuuu]] format.
>

The problem is that your empty choice None becomes the string "None" when it
is rendered as an HTML select input element, and comes back in the POST data
as a the string "None", not Python's None, so the model TimeField tries to
parse the string value "None" as a time and fails.  First way that comes to
mind to fix it is to change your None to an empty string in
END_TIME_CHOICES, and use a TypedChoiceField with empty_value set to None
for your form field:

    time_end = forms.TypedChoiceField(required=False,
choices=END_TIME_CHOICES, empty_value=None)

Karen

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to