You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

views.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.views.generic import ListView
  2. from django import http
  3. from django.shortcuts import get_object_or_404
  4. from oscar.core.loading import get_model
  5. from oscar.apps.offer.models import ConditionalOffer, Range
  6. Product = get_model('catalogue', 'Product')
  7. class OfferListView(ListView):
  8. model = ConditionalOffer
  9. context_object_name = 'offers'
  10. template_name = 'offer/list.html'
  11. def get_queryset(self):
  12. return ConditionalOffer.active.filter(
  13. offer_type=ConditionalOffer.SITE)
  14. class OfferDetailView(ListView):
  15. context_object_name = 'products'
  16. template_name = 'offer/detail.html'
  17. paginate_by = 20
  18. def get(self, request, *args, **kwargs):
  19. try:
  20. self.offer = ConditionalOffer.objects.select_related().get(
  21. slug=self.kwargs['slug'])
  22. except ConditionalOffer.DoesNotExist:
  23. raise http.Http404
  24. return super(OfferDetailView, self).get(request, *args, **kwargs)
  25. def get_context_data(self, **kwargs):
  26. ctx = super(OfferDetailView, self).get_context_data(**kwargs)
  27. ctx['offer'] = self.offer
  28. ctx['upsell_message'] = self.offer.get_upsell_message(
  29. self.request.basket)
  30. return ctx
  31. def get_queryset(self):
  32. return self.offer.products()
  33. class RangeDetailView(ListView):
  34. template_name = 'offer/range.html'
  35. context_object_name = 'products'
  36. def dispatch(self, request, *args, **kwargs):
  37. self.range = get_object_or_404(
  38. Range, slug=kwargs['slug'], is_public=True)
  39. return super(RangeDetailView, self).dispatch(
  40. request, *args, **kwargs)
  41. def get_queryset(self):
  42. products = self.range.included_products.all()
  43. return products.order_by('rangeproduct__display_order')
  44. def get_context_data(self, **kwargs):
  45. ctx = super(RangeDetailView, self).get_context_data(**kwargs)
  46. ctx['range'] = self.range
  47. return ctx