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.

1234567891011121314151617181920212223242526272829303132
  1. from django.views.generic import ListView
  2. from django.shortcuts import get_object_or_404
  3. from django.db.models import get_model
  4. from oscar.apps.offer.models import ConditionalOffer
  5. Product = get_model('catalogue', 'Product')
  6. class OfferDetailView(ListView):
  7. context_object_name = 'products'
  8. template_name = 'offer/detail.html'
  9. paginate_by = 20
  10. def get(self, request, *args, **kwargs):
  11. self.offer = get_object_or_404(
  12. ConditionalOffer, slug=self.kwargs['slug'])
  13. return super(OfferDetailView, self).get(request, *args, **kwargs)
  14. def get_context_data(self, **kwargs):
  15. ctx = super(OfferDetailView, self).get_context_data(**kwargs)
  16. ctx['offer'] = self.offer
  17. ctx['upsell_message'] = self.offer.get_upsell_message(
  18. self.request.basket)
  19. return ctx
  20. def get_queryset(self):
  21. range = self.offer.condition.range
  22. if not range:
  23. return Product.objects.none()
  24. if range.includes_all_products:
  25. return Product.browsable.filter(is_discountable=True)
  26. return range.included_products.filter(is_discountable=True)