Development of an internal social media platform with personalised dashboards for students
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.

admin_utils.py 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from functools import update_wrapper
  2. from django.contrib.admin.utils import unquote
  3. from django.http import Http404
  4. from django.utils.encoding import force_text
  5. from django.utils.translation import ugettext as _
  6. from .models import Subscription
  7. class ExtendibleModelAdminMixin(object):
  8. def _getobj(self, request, object_id):
  9. opts = self.model._meta
  10. try:
  11. obj = self.get_queryset(request).get(pk=unquote(object_id))
  12. except self.model.DoesNotExist:
  13. # Don't raise Http404 just yet, because we haven't checked
  14. # permissions yet. We don't want an unauthenticated user to
  15. # be able to determine whether a given object exists.
  16. obj = None
  17. if obj is None:
  18. raise Http404(
  19. _(
  20. '%(name)s object with primary key '
  21. '%(key)r does not exist.'
  22. ) % {
  23. 'name': force_text(opts.verbose_name),
  24. 'key': force_text(object_id)
  25. }
  26. )
  27. return obj
  28. def _wrap(self, view):
  29. def wrapper(*args, **kwargs):
  30. return self.admin_site.admin_view(view)(*args, **kwargs)
  31. return update_wrapper(wrapper, view)
  32. def _view_name(self, name):
  33. info = self.model._meta.app_label, self.model._meta.model_name, name
  34. return '%s_%s_%s' % info
  35. def make_subscription(newsletter, email, name=None):
  36. addr = Subscription(subscribed=True)
  37. addr.newsletter = newsletter
  38. addr.email_field = email
  39. if name:
  40. addr.name_field = name
  41. return addr