Я пытался сделать MultilingualModel в Django, но язык остается по умолчанию и не меняется

Я пытаюсь сделать многоязычную модель в Django. Но мой код не работает, он просто игнорирует мою функцию select_language и выбирает default_language. Я понятия не имею, что вызывает ошибку. Вот мой код

models.py


class MultilingualQuerySet(models.query.QuerySet):
    selected_language = None

    def __init__(self, *args, **kwargs):
        super(MultilingualQuerySet, self).__init__(*args, **kwargs)

    def select_language(self, lang):
        self.selected_language = lang
        return self

    def iterator(self):
        result_iter = super(MultilingualQuerySet, self).iterator()
        for result in result_iter:
            if hasattr(result, 'select_language'):
                result.select_language(self.selected_language)
            yield result

    def _clone(self, *args, **kwargs):
        qs = super(MultilingualQuerySet, self)._clone(*args, **kwargs)
        if hasattr(qs, 'select_language'):
            qs.select_language(self.selected_language)
        return qs


class MultilingualManager(models.Manager):
    use_for_related_fields = True
    selected_language = None

    def select_language(self, lang):
        self.selected_language = lang
        return self

    def get_query_set(self):
        qs = MultilingualQuerySet(self.model, using=self._db)
        return qs.select_language(self.selected_language)


class MultilingualModel(models.Model):
    objects = MultilingualManager()
    # fallback/default language code

    default_language = None

    # currently selected language
    selected_language = None

    class Meta:
        abstract = True

    def select_language(self, lang):
        """Select a language"""
        self.selected_language = lang
        return self

    def __getattribute__(self, name):
        def get(x):
            return super(MultilingualModel, self).__getattribute__(x)

        try:
            # Try to get the original field, if exists
            value = get(name)
            # If we can select language on the field as well, do it
            if isinstance(value, MultilingualModel):
                value.select_language(get('selected_language'))
            return value
        except AttributeError as e:
            # Try the translated variant, falling back to default if no
            # language has been explicitly selected
            lang = self.selected_language
            if not lang:
                lang = self.default_language
            if not lang:
                raise

            value = get(name + '_' + lang)

            # If the translated variant is empty, fallback to default
            if isinstance(value, str) and value == u'':
                value = get(name + '_' + self.default_language)

        return value

class Blog(MultilingualModel):
    default_language = 'es'

    title_en = models.CharField(max_length=300, blank=True, default='')
    title_es = models.CharField(max_length=300, blank=True, default='')
    text_en = models.TextField(blank=True, default='')
    text_es = models.TextField(blank=True, default='')
    photo1 = models.ImageField(upload_to='photos_blog/%Y/%m/')

    def __str__(self):
        return self.title


И я попытался получить все объекты Blog с английским названием

`

print(Blog.objects.select_language('en').all())

` Но все равно у меня есть испанские названия

Вернуться на верх