admin.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. import autocomplete_light
  4. from django.contrib import admin
  5. from django.contrib import messages
  6. from django.http import HttpResponseRedirect
  7. from .models import MaillingList, SyncCommandError
  8. class MaillingListAdmin(admin.ModelAdmin):
  9. list_display = ('email', 'verbose_name')
  10. actions = ['sync_to_server']
  11. def sync_to_server(self, request, queryset):
  12. for _list in queryset.all():
  13. try:
  14. _list.sync_to_list_server()
  15. except Exception as e:
  16. messages.error(
  17. request,
  18. 'Impossible de synchroniser la liste {} : "{}"'.format(
  19. _list, e))
  20. else:
  21. messages.success(
  22. request,
  23. 'Liste {} synchronisée vers le serveur'.format(
  24. _list.email))
  25. sync_to_server.short_description = (
  26. 'Synchroniser les listes sélectionnées vers le serveur')
  27. form = autocomplete_light.modelform_factory(
  28. MaillingList,
  29. fields='__all__',
  30. )
  31. def change_view(self, request, object_id, form_url='', extra_context=None):
  32. try:
  33. return super(MaillingListAdmin, self).change_view(
  34. request, object_id, form_url, extra_context)
  35. except SyncCommandError as e:
  36. try:
  37. ml = MaillingList.objects.get(pk=object_id)
  38. ml_name = "La liste mail « {} »".format(ml.short_name)
  39. except MaillingList.DoesNotExist:
  40. ml_name = "La nouvelle liste mail"
  41. messages.error(
  42. request,
  43. "{} n'a pas pu être synchronisée".format(ml_name) +
  44. " vers le serveur de listes : « {} ». Vous pouvez".format(e) +
  45. " relancer la synchro depuis la liste des listes mail.")
  46. return HttpResponseRedirect(request.path)
  47. admin.site.register(MaillingList, MaillingListAdmin)