# -*- coding: utf-8 -*- from __future__ import unicode_literals import sys from django.db import models from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _, get_language, activate from django.utils import six from django.utils.encoding import python_2_unicode_compatible from hvad.manager import TranslationManager from hvad.models import TranslatableModel, TranslatedFields, \ TranslatableModelBase from newsbox.models import NewsboxModelBase, NewsboxManager, \ NewsboxBase, newsbox_models class NewsboxHVADManager(TranslationManager, NewsboxManager): pass def newsboxhvad_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts): translatedFields={} for trans_field in newsbox_opts['trans_fieldnames']: translatedFields[trans_field] = class_attrs.pop(trans_field) class_attrs['translations'] = TranslatedFields(**translatedFields) class_attrs['newsbox_objects'] = NewsboxHVADManager() #class_attrs['default_manager'] = class_attrs['newsbox_objects'] class NewsboxHVADModelBase(NewsboxModelBase, TranslatableModelBase): pass @python_2_unicode_compatible class NewsboxHVADBase(six.with_metaclass(NewsboxHVADModelBase, TranslatableModel)): """ Define News which expires in time and will not be displayed in front """ default_manager = NewsboxHVADManager() objects = default_manager def __str__(self): return self.lazy_translation_getter( 'newsbox_title', _('News #%d') % self.pk) def get_slug(self, language=None, *args, **kwargs): """ Returns the slug for this object for the given language. """ if language is None or language == self.language_code: return self.safe_translation_getter('newsbox_slug') else: instance = self.__class__.objects.language(language).get(pk=self.pk) return instance.safe_translation_getter('newsbox_slug') def get_absolute_url(self, language=None, *args, **kwargs): """ Build url for the given language. """ current_language = get_language() if not language: language = current_language if language in self.get_available_languages(): activate(language) url = reverse(self._newsbox_meta['detail_url_name'], args=( self.newsbox_date.strftime("%Y"), self.newsbox_date.strftime("%m"), self.newsbox_date.strftime("%d"), self.get_slug(language=language),)) activate(current_language) return url return "./" class Meta: abstract = True verbose_name = _('news') verbose_name_plural = _('news') #newsbox_metaclass_base_processor = 'newsboxhvad_mcls_processor' newsbox_metaclass_final_processor = 'newsboxhvad_mcls_processor'