class OrderHistoryView(ListView): """ Customer order history """ context_object_name = "orders" template_name = 'customer/order-history.html' paginate_by = 20 model = order_model form_class = SearchByDateRangeForm def get(self, request, *args, **kwargs): if 'date_from' in request.GET: self.form = SearchByDateRangeForm(self.request.GET) if not self.form.is_valid(): ctx = self.get_context_data() return self.render_to_response(ctx) else: self.form = SearchByDateRangeForm() return super(OrderHistoryView, self).get(request, *args, **kwargs) def get_queryset(self): qs = self.model._default_manager.filter(user=self.request.user) if self.form.is_bound: qs = qs.filter(**self.form.get_filters()) return qs def get_context_data(self, *args, **kwargs): ctx = super(OrderHistoryView, self).get_context_data(*args, **kwargs) ctx['form'] = self.form return ctx
def get(self, request, *args, **kwargs): if 'date_from' in request.GET: self.form = SearchByDateRangeForm(self.request.GET) if not self.form.is_valid(): ctx = self.get_context_data() return self.render_to_response(ctx) else: self.form = SearchByDateRangeForm() return super(OrderHistoryView, self).get(request, *args, **kwargs)
def get_context_data(self, *args, **kwargs): ctx = super(OrderHistoryView, self).get_context_data(*args, **kwargs) if 'date_from' in self.request.REQUEST or 'date_to' in self.request.REQUEST: filter_form = SearchByDateRangeForm(self.request.REQUEST) else: filter_form = SearchByDateRangeForm() ctx['search_date_form'] = filter_form if not filter_form.is_valid(): return ctx date_to = filter_form.cleaned_data['date_to'] date_from = filter_form.cleaned_data['date_from'] # Return filtered data from date_from to date_to if date_to or date_from: if not date_from: ctx['orders'] = self.model._default_manager.filter(user=self.request.user, date_placed__lte=date_to) elif not date_to: ctx['orders'] = self.model._default_manager.filter(user=self.request.user, date_placed__gte=date_from) else: ctx['orders'] = self.model._default_manager.filter(user=self.request.user, date_placed__range=[date_from, date_to]) else: # If both fields of search_date_form are blank ctx['error'] = 'Please select filter settings' return ctx