Skip to content
Snippets Groups Projects
admin.py 2.1 KiB
Newer Older
# -*- 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)
Dylann Cordel's avatar
Dylann Cordel committed
        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