# -*- coding: utf-8 -*- from __future__ import unicode_literals import copy from django.conf import settings from parler.admin import TranslatableAdmin from django.utils.translation import ugettext_lazy as _ def edit_translation_links(obj): output = '' for lang in obj.get_available_languages(): output += ( '<a href="./%s/?language=%s" ' 'target="_parent" title="Edit this %s in %s">%s' '</a>' ) % (obj.pk, lang, obj._meta.verbose_name, lang.upper(), lang.upper(),) return output edit_translation_links.allow_tags = True edit_translation_links.short_description = _('translations') class NewsboxI18NBaseAdmin(TranslatableAdmin): search_fields = ['translations__newsbox_title', 'translations__newsbox_summary'] date_hierarchy = 'newsbox_publication_start_date' def get_list_display(self, request): list_display = super(NewsboxI18NBaseAdmin, self).get_list_display(request) if not getattr(self.__class__, 'list_display', None): if NewsboxI18NBaseAdmin not in list_display: # prevent modifying class list_display variable list_display = copy.deepcopy(list_display) if settings.LANGUAGES and len(settings.LANGUAGES) > 1: list_display.insert(1, edit_translation_links) return list_display def ensure_slug_uniq_queryset(self, request, obj, slug): language = self.get_form_language(request, obj) y, m, d = (obj.newsbox_publication_start_date.year, obj.newsbox_publication_start_date.month, obj.newsbox_publication_start_date.day) queryset = type(obj).objects.filter(newsbox_publication_start_date__year=y, newsbox_publication_start_date__month=m, newsbox_publication_start_date__day=d)\ .translated(language, newsbox_slug=slug) if obj.pk: queryset = queryset.exclude(pk=obj.pk) return queryset class NewsboxI18NAdmin(NewsboxI18NBaseAdmin): pass