# -*- coding: utf-8 -*- from __future__ import unicode_literals import copy from django.conf import settings from hvad.admin import TranslatableAdmin from hvad.forms import translatable_modelform_factory from django.utils.translation import ugettext_lazy as _ from django.contrib.admin.util import flatten_fieldsets from django.utils.functional import curry 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 NewsboxHVADBaseAdmin(TranslatableAdmin): #XXX: hvad TranslatableAdmin doesn't support search_fields # search_fields = ['newsbox_title', 'newsbox_summary', ] # date_hierarchy = 'newsbox_publication_start_date' def get_list_display(self, request): list_display = super(NewsboxHVADBaseAdmin, self).get_list_display(request) # 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 get_form(self, request, obj=None, **kwargs): """ This function is a workaround to an hvad issue. It doesn't use get_fieldsets function. Returns a Form class for use in the admin add view. This is used by add_view and change_view. """ fieldsets = self.get_fieldsets(request, obj) if fieldsets: fields = flatten_fieldsets(fieldsets) else: fields = None if self.exclude is None: exclude = [] else: exclude = list(self.exclude) exclude.extend(kwargs.get("exclude", [])) exclude.extend(self.get_readonly_fields(request, obj)) # Exclude language_code, adding it again to the instance is done by # the LanguageAwareCleanMixin (see translatable_modelform_factory) exclude.append('language_code') old_formfield_callback = curry(self.formfield_for_dbfield, request=request) defaults = { "form": self.form, "fields": fields, "exclude": exclude, "formfield_callback": old_formfield_callback, } defaults.update(kwargs) language = self._language(request) return translatable_modelform_factory(language, self.model, **defaults) class NewsboxHVADAdmin(NewsboxHVADBaseAdmin): pass