Skip to content
Snippets Groups Projects
models.py 2.82 KiB
Newer Older
Olivier Le Brouster's avatar
Olivier Le Brouster committed
# -*- 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
Olivier Le Brouster's avatar
Olivier Le Brouster committed
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):
Olivier Le Brouster's avatar
Olivier Le Brouster committed
    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)
Olivier Le Brouster's avatar
Olivier Le Brouster committed

    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'