選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

views.py 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. from django.shortcuts import get_object_or_404
  2. from django.contrib.auth.decorators import login_required
  3. from django.views.generic import ListView
  4. from django.core.urlresolvers import reverse
  5. from django.http import HttpResponseRedirect
  6. from django.contrib import messages
  7. from django.utils.translation import ugettext as _
  8. from django.template.response import TemplateResponse
  9. from oscar.apps.address.forms import UserAddressForm
  10. from oscar.view.generic import ModelView
  11. from oscar.core.loading import import_module
  12. import_module('address.models', ['UserAddress'], locals())
  13. import_module('order.models', ['Order', 'Line'], locals())
  14. import_module('basket.models', ['Basket'], locals())
  15. @login_required
  16. def profile(request):
  17. u"""Return a customers's profile"""
  18. # Load last 5 orders as preview
  19. orders = Order._default_manager.filter(user=request.user)[0:5]
  20. return TemplateResponse(request, 'oscar/customer/profile.html', {'orders': orders})
  21. class OrderHistoryView(ListView):
  22. u"""Customer order history"""
  23. context_object_name = "orders"
  24. template_name = 'oscar/customer/order-history.html'
  25. paginate_by = 20
  26. def get_queryset(self):
  27. u"""Return a customer's orders"""
  28. return Order._default_manager.filter(user=self.request.user)
  29. class OrderDetailView(ModelView):
  30. u"""Customer order details"""
  31. template_file = "oscar/customer/order.html"
  32. def get_model(self):
  33. u"""Return an order object or 404"""
  34. return get_object_or_404(Order, user=self.request.user, number=self.kwargs['order_number'])
  35. def handle_GET(self, order):
  36. self.response = TemplateResponse(self.request, self.template_file, {'order': order})
  37. class OrderLineView(ModelView):
  38. u"""Customer order line"""
  39. def get_model(self):
  40. u"""Return an order object or 404"""
  41. order = get_object_or_404(Order, user=self.request.user, number=self.kwargs['order_number'])
  42. return order.lines.get(id=self.kwargs['line_id'])
  43. def handle_GET(self, line):
  44. return HttpResponseRedirect(reverse('oscar-customer-order-view', kwargs={'order_number': line.order.number}))
  45. def handle_POST(self, line):
  46. self.response = HttpResponseRedirect(reverse('oscar-customer-order-view', kwargs={'order_number': line.order.number}))
  47. super(OrderLineView, self).handle_POST(line)
  48. def do_reorder(self, line):
  49. if not line.product:
  50. messages.info(self.request, _("This product is no longer available for re-order"))
  51. return
  52. # We need to pass response to the get_or_create... method
  53. # as a new basket might need to be created
  54. self.response = HttpResponseRedirect(reverse('oscar-basket'))
  55. basket = request.basket
  56. # Convert line attributes into basket options
  57. options = []
  58. for attribute in line.attributes.all():
  59. if attribute.option:
  60. options.append({'option': attribute.option, 'value': attribute.value})
  61. basket.add_product(line.product, 1, options)
  62. messages.info(self.request, "Line reordered")
  63. class AddressBookView(ListView):
  64. u"""Customer address book"""
  65. context_object_name = "addresses"
  66. template_name = 'oscar/customer/address-book.html'
  67. paginate_by = 40
  68. def get_queryset(self):
  69. u"""Return a customer's addresses"""
  70. return UserAddress._default_manager.filter(user=self.request.user)
  71. class AddressView(ModelView):
  72. u"""Customer address view"""
  73. template_file = "oscar/customer/address-form.html"
  74. def get_model(self):
  75. u"""Return an address object or a 404"""
  76. return get_object_or_404(UserAddress, user=self.request.user, pk=self.kwargs['address_id'])
  77. def handle_GET(self, address):
  78. form = UserAddressForm(instance=address)
  79. self.response = TemplateResponse(self.request, self.template_file, {'form': form})
  80. def do_save(self, address):
  81. u"""Save an address"""
  82. form = UserAddressForm(self.request.POST, instance=address)
  83. if form.is_valid():
  84. form.save()
  85. self.response = HttpResponseRedirect(reverse('oscar-customer-address-book'))
  86. else:
  87. self.response = TemplateResponse(self.request, self.template_file, {'form': form})
  88. def do_delete(self, address):
  89. u"""Delete an address"""
  90. address.delete()
  91. self.response = HttpResponseRedirect(reverse('oscar-customer-address-book'))