Newer
Older
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
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 parler.managers import TranslatableManager, TranslatableQuerySet
from parler.models import TranslatableModel, TranslatedFields
from newsbox.models import NewsboxModelBase, NewsboxManager
class NewsboxI18NQueryset(TranslatableQuerySet):
class NewsboxI18NManager(TranslatableManager, NewsboxManager):
queryset_class = NewsboxI18NQueryset
def newsboxi18n_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts):
for trans_field in newsbox_opts['trans_fieldnames']:
translatedFields[trans_field] = class_attrs.pop(trans_field)
translatedFields['meta'] = {
'unique_together': (('newsbox_slug', 'language_code'), ),
'verbose_name': _('News translation'),
'verbose_name_plural': _('News translations')
}
class_attrs['translations'] = TranslatedFields(**translatedFields)
class_attrs['newsbox_objects'] = NewsboxI18NManager()
# class_attrs['default_manager'] = class_attrs['newsbox_objects']
class NewsboxI18NModelBase(NewsboxModelBase):
class NewsboxI18NBase(six.with_metaclass(NewsboxI18NModelBase, TranslatableModel)):
"""
Define News which expires in time and will not be displayed in front
"""
_('News #%d') % self.pk,
any_language=True)
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 not in self.get_available_languages():
if not self.get_available_languages():
return None
language = None
for lang in self.get_fallback_languages():
if lang in self.get_available_languages():
language = lang
break
if not language:
return None
activate(language)
url = reverse(self._newsbox_meta['detail_url_name'], args=(
self.newsbox_publication_start_date.strftime("%Y"),
self.newsbox_publication_start_date.strftime("%m"),
self.newsbox_publication_start_date.strftime("%d"),
self.get_slug(language=language),))
activate(current_language)
return url
class Meta:
abstract = True
verbose_name = _('news')
verbose_name_plural = _('news')
# newsbox_metaclass_base_processor = 'newsboxi18n_mcls_processor'
newsbox_metaclass_final_processor = 'newsboxi18n_mcls_processor'