# -*- coding: utf-8 -*- from __future__ import unicode_literals import autocomplete_light from django.contrib import admin from django.contrib import messages from django.http import HttpResponseRedirect from .models import MaillingList, SyncCommandError class MaillingListAdmin(admin.ModelAdmin): list_display = ('email', 'verbose_name') actions = ['sync_to_server'] def sync_to_server(self, request, queryset): for _list in queryset.all(): try: _list.sync_to_list_server() except Exception as e: messages.error( request, 'Impossible de synchroniser la liste {} : "{}"'.format( _list, e)) else: messages.success( request, 'Liste {} synchronisée vers le serveur'.format( _list.email)) sync_to_server.short_description = ( 'Synchroniser les listes sélectionnées vers le serveur') form = autocomplete_light.modelform_factory( MaillingList, fields='__all__', ) def change_view(self, request, object_id, form_url='', extra_context=None): try: return super(MaillingListAdmin, self).change_view( request, object_id, form_url, extra_context) except SyncCommandError as e: try: ml = MaillingList.objects.get(pk=object_id) ml_name = "La liste mail « {} »".format(ml.short_name) except MaillingList.DoesNotExist: ml_name = "La nouvelle liste mail" messages.error( request, "{} n'a pas pu être synchronisée".format(ml_name) + " vers le serveur de listes : « {} ». Vous pouvez".format(e) + " relancer la synchro depuis la liste des listes mail.") return HttpResponseRedirect(request.path) admin.site.register(MaillingList, MaillingListAdmin)