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 3.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from django.db.models import Q
  2. from django.contrib import messages
  3. from django.contrib.auth.models import User
  4. from django.utils.translation import ugettext_lazy as _
  5. from django.http import HttpResponseRedirect
  6. from django.core.urlresolvers import reverse
  7. from django.views.generic import ListView, DetailView
  8. from oscar.apps.dashboard.users import forms
  9. from oscar.views.generic import BulkEditMixin
  10. class IndexView(ListView, BulkEditMixin):
  11. template_name = 'dashboard/users/index.html'
  12. paginate_by = 25
  13. model = User
  14. actions = ('make_active', 'make_inactive', )
  15. current_view = 'dashboard:users-index'
  16. form_class = forms.UserSearchForm
  17. desc_template = _('%(main_filter)s %(email_filter)s %(name_filter)s')
  18. description = ''
  19. def get_queryset(self):
  20. queryset = self.model.objects.all().order_by('-date_joined')
  21. self.desc_ctx = {
  22. 'main_filter': _('All users'),
  23. 'email_filter': '',
  24. 'name_filter': '',
  25. }
  26. if 'email' not in self.request.GET:
  27. self.form = self.form_class()
  28. return queryset
  29. self.form = self.form_class(self.request.GET)
  30. if not self.form.is_valid():
  31. return queryset
  32. data = self.form.cleaned_data
  33. if data['email']:
  34. queryset = queryset.filter(email__startswith=data['email'])
  35. self.desc_ctx['email_filter'] = _(" with email matching '%s'") % data['email']
  36. if data['name']:
  37. # If the value is two words, then assume they are first name and last name
  38. parts = data['name'].split()
  39. if len(parts) == 2:
  40. queryset = queryset.filter(Q(first_name__istartswith=parts[0]) |
  41. Q(last_name__istartswith=parts[1])).distinct()
  42. else:
  43. queryset = queryset.filter(Q(first_name__istartswith=data['name']) |
  44. Q(last_name__istartswith=data['name'])).distinct()
  45. self.desc_ctx['name_filter'] = _(" with name matching '%s'") % data['name']
  46. return queryset
  47. def get_context_data(self, **kwargs):
  48. context = super(IndexView, self).get_context_data(**kwargs)
  49. context['form'] = self.form
  50. context['queryset_description'] = self.desc_template % self.desc_ctx
  51. return context
  52. def make_inactive(self, request, users):
  53. return self._change_users_active_status(users, False)
  54. def make_active(self, request, users):
  55. return self._change_users_active_status(users, True)
  56. def _change_users_active_status(self, users, value):
  57. for user in users:
  58. if not user.is_superuser:
  59. user.is_active = value
  60. user.save()
  61. messages.info(self.request, _("Users' status successfully changed"))
  62. return HttpResponseRedirect(reverse(self.current_view))
  63. class UserDetailView(DetailView):
  64. template_name = 'dashboard/users/detail.html'
  65. model = User
  66. context_object_name = 'customer'