python - strptime validation error django -


i have daterangepicker users set date. choice of format "dd mmm yyyy" go i'm using

    datetime.datetime.strptime(time, "%d %b %y"); 

but still getting error

    exception value:[u"'01 aug 2013' value has invalid date format. must in   yyyy-mm-dd format."] 

any idea might going wrong? stuck on while.

    def form_valid(self, form):       new_obj = form.save(commit=false)       new_obj.date_pickup_from, new_obj.date_pickup_to = form.cleaned_data['pickup_daterange'].split(' ')       new_obj.date_delivery_from, new_obj.date_delivery_to = form.cleaned_data['delivery_daterange'].split(' ') 

here forms

pickup_daterange = forms.charfield(     label=_('pickup within'),     widget=forms.textinput(attrs={'class': 'daterange'}),     validators=[         regexvalidator(             regex=r'\d{2}\ \w{3}\ \d{4}\ to\ \d{2}\ \w{3}\ \d{4}',             message=_(u'range must of format "mm/dd/yyyy mm/dd/yyyy"'),             code='invalid_range'         )     ],     help_text=_('within dates want pickup?') ) delivery_daterange = forms.charfield(     label=_('delivery within'),     widget=forms.textinput(attrs={'class': 'daterange'}),     validators=[         regexvalidator(             regex=r'\d{2}\ \w{3}\ \d{4}\ to\ \d{2}\ \w{3}\ \d{4}',             message=_(u'range must of format "mm/dd/yyyy mm/dd/yyyy"'),             code='invalid_range'         )     ],     help_text=_('within dates want delivery?') ) 

models.py

date_delivery_from = models.datefield(_('date of delivery from'), blank=true, null=true) date_delivery_to = models.datefield(_('date of delivery to'), blank=true, null=true) 

function in form class calling strptime

    def clean_delivery_daterange(self):       daterange_pattern = re.compile(r'(\d{2}\ \w{3}\ \d{4})\ to\ (\d{2}\ \w{3}\ \d{4})')       delivery_daterange = self.cleaned_data['delivery_daterange']       pickup_daterange = self.cleaned_data['pickup_daterange']        str_pickup_from, str_pickup_to = daterange_pattern.search(pickup_daterange).groups()       str_delivery_from, str_delivery_to = daterange_pattern.search(delivery_daterange).groups()        delivery_from = datetime.datetime.strptime(str_delivery_from, "%d %b %y")       pickup_from = datetime.datetime.strptime(str_pickup_from, "%d %b %y")       if delivery_from < pickup_from:         raise forms.validationerror('delivery dates cannot before pickup dates')       return delivery_daterange 

your problem you're not returning converted values.

delivery_daterange = self.cleaned_data['delivery_daterange'] [...] return delivery_daterange 

that returns same string, unparsed. instead:

def clean_delivery_daterange(self):     [...]     delivery_from = datetime.datetime.strptime(str_delivery_from, "%d %b %y")     delivery_to = datetime.datetime.strptime(str_delivery_to, "%d %b %y")     return (delivery_from, delivery_to)  def clean_pickup_daterange(self):     [...]     pickup_from = datetime.datetime.strptime(str_pickup_from, "%d %b %y")     pickp_to = datetime.datetime.strptime(str_pickup_to, "%d %b %y")     return (pickup_from, pickup_to) 

and in view:

new_obj.date_pickup_from, new_obj.date_pickup_to = form.cleaned_data['pickup_daterange'] 

an alternate approach return text values, convert date objects in view:

def form_valid(self, form):     new_obj = form.save(commit=false)     pickup_start_string, pickup_end_string = form.cleaned_data['pickup_daterange'].split(' ')     new_obj.date_pickup_from = strptime(pickup_start_string, "%d %b %y")     #...etc 

a more advanced approach define custom field cover concept of date range, , define to_python method return, say, tuple of date objects.

personally, simplify whole thing , let date_pickup_from , rest datefield instances in form, maybe custom widget if wanted use jquery datepicker user pick dates, , take care of special rendering in template.


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -