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
from parler.models import TranslatableModel, TranslatedFields
from newsbox.models import NewsboxModelBase, NewsboxManager
class NewsboxI18NManager(TranslatableManager, NewsboxManager):
def newsboxi18n_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'] = 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
"""
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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 = 'newsboxi18n_mcls_processor'
newsbox_metaclass_final_processor = 'newsboxi18n_mcls_processor'