Exemple #1
0
    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')
Exemple #3
0
    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)
Exemple #4
0
 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)