def form_valid(self, form): """ Force product and user values into a form after it's validated and save review_id to session. """ product = get_by_slug_or_404(Product, self.kwargs.get('slug', None)) form.instance.product = product user = getattr(self.request, 'user', None) form.instance.user = user if user and user.is_authenticated() else None form.instance.session_key = self.request.session.session_key return super(ReviewCreateView, self).form_valid(form)
def get(self, request, slug, *args, **kwargs): product = get_by_slug_or_404(Product, slug) attrs = dict(request.GET.items()) response = None if attrs: variant = product.get_variant(**attrs) if variant is not None: response = variant.as_dict else: variants = product.variants.select_related().all() if variants: response = [x.as_dict for x in variants] if response is None and not request.is_ajax(): raise Http404 return HttpResponse( json.dumps(response), content_type='application/json')
def get(self, request, *args, **kwargs): """ If review already written for this user/session redirect to update view for that review. """ user = getattr(request, 'user', None) product = get_by_slug_or_404(Product, kwargs.get('slug', None)) filters = {'product': product} if user and user.is_authenticated(): filters['user'] = user else: filters['session_key'] = request.session.session_key if len(filters) > 1: try: review = Review.objects.get(**filters) return HttpResponseRedirect(reverse_lazy( 'catalog_review_update', args=[product.get_slug(), review.pk])) except Review.DoesNotExist: pass return super(ReviewCreateView, self).get(request, *args, **kwargs)
def dispatch(self, request, *args, **kwargs): self.product = get_by_slug_or_404(Product, kwargs.get('slug', None)) return super(ProductMixin, self).dispatch(request, *args, **kwargs)