Ejemplo n.º 1
0
    def __init__(self, *args, **kwargs):
        # Still allow to pass the translated fields (e.g. title=...) to this function.
        translated_kwargs = {}
        current_language = None
        if kwargs:
            current_language = kwargs.pop('_current_language', None)
            for field in self._parler_meta.get_all_fields():
                try:
                    translated_kwargs[field] = kwargs.pop(field)
                except KeyError:
                    pass

        # Have the attributes available, but they can't be ready yet;
        # self._state.adding is always True at this point,
        # the QuerySet.iterator() code changes it after construction.
        self._translations_cache = None
        self._current_language = None

        # Run original Django model __init__
        super(TranslatableModelMixin, self).__init__(*args, **kwargs)

        # Assign translated args manually.
        self._translations_cache = defaultdict(dict)
        self._current_language = normalize_language_code(current_language or get_language())  # What you used to fetch the object is what you get.

        if translated_kwargs:
            self._set_translated_fields(self._current_language, **translated_kwargs)
Ejemplo n.º 2
0
    def test_get_language_with_fallback(self):
        """Test get_language patch function, with fallback"""
        from parler import appsettings

        with override(None):
            if django.VERSION >= (1, 8):
                self.assertEquals(get_language(), appsettings.PARLER_DEFAULT_LANGUAGE_CODE)
Ejemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        # Still allow to pass the translated fields (e.g. title=...) to this function.
        translated_kwargs = {}
        current_language = None
        if kwargs:
            current_language = kwargs.pop('_current_language', None)
            for field in self._parler_meta.get_all_fields():
                try:
                    translated_kwargs[field] = kwargs.pop(field)
                except KeyError:
                    pass

        # Have the attributes available, but they can't be ready yet;
        # self._state.adding is always True at this point,
        # the QuerySet.iterator() code changes it after construction.
        self._translations_cache = None
        self._current_language = None

        # Run original Django model __init__
        super(TranslatableModelMixin, self).__init__(*args, **kwargs)

        # Assign translated args manually.
        self._translations_cache = defaultdict(dict)
        self._current_language = normalize_language_code(current_language or get_language())  # What you used to fetch the object is what you get.

        if translated_kwargs:
            self._set_translated_fields(self._current_language, **translated_kwargs)
Ejemplo n.º 4
0
    def set_current_language(self, language_code, initialize=False):
        """
        Switch the currently activate language of the object.
        """
        self._current_language = normalize_language_code(language_code or get_language())

        # Ensure the translation is present for __get__ queries.
        if initialize:
            self._get_translated_model(use_fallback=False, auto_create=True)
Ejemplo n.º 5
0
    def set_current_language(self, language_code, initialize=False):
        """
        Switch the currently activate language of the object.
        """
        self._current_language = normalize_language_code(language_code or get_language())

        # Ensure the translation is present for __get__ queries.
        if initialize:
            self._get_translated_model(use_fallback=False, auto_create=True)
Ejemplo n.º 6
0
 def _pop_translated_data(self):
     """
     Separate data of translated fields from other data.
     """
     translated_data = {}
     for meta in self.Meta.model._parler_meta:
         translations = self.validated_data.pop(meta.rel_name, {})
         if translations:
             translated_data[meta.rel_name] = translations
         else:
             # Either declare the active language on the object or get it from Django
             language_code = self.validated_data.pop('language_code', None) or get_language()
             translated_fields = self._pop_translatable_fields()
             if translated_fields:
                 translations[language_code] = translated_fields
                 translated_data[meta.rel_name] = translations
     return translated_data
Ejemplo n.º 7
0
    def get_active_choices(self, language_code=None, site_id=None):
        """
        Find out which translations should be visible in the site.
        It returns a list with either a single choice (the current language),
        or a list with the current language + fallback language.
        """
        if language_code is None:
            language_code = get_language()

        lang_dict = self.get_language(language_code, site_id=site_id)
        if not lang_dict["hide_untranslated"]:
            return [language_code] + [
                lang
                for lang in lang_dict["fallbacks"] if lang != language_code
            ]
        else:
            return [language_code]
Ejemplo n.º 8
0
    def test_get_language_no_fallback(self):
        """Test get_language patch function, no fallback"""

        with override(None):
            if django.VERSION >= (1, 8):
                self.assertEquals(get_language(), None)
Ejemplo n.º 9
0
    def test_get_language_no_fallback(self):
        """Test get_language patch function, no fallback"""

        with override(None):
            self.assertEqual(get_language(), None)
Ejemplo n.º 10
0
 def get_queryset(self):
     qs = super(TranslatedApiViewMixin,
                self).get_queryset().language(get_language())
     qs = qs.order_by(*qs.model._meta.ordering)
     return qs