Vladimir_Levadnij
@Vladimir_Levadnij
Генеральный разнорабочий Текнокомо

Как в многоязычной системе вывести текст с языковым тегом RU из дочерней таблицы с текстами?

Здравствуйте. Используется Python 3.6.2 / Django 1.11.5

Есть код позволяющий создавать, например, для текстов постов и / или заголовков, варианты на разных языках (код приводится ниже). Необходимо из создаваемой дочерней таблицы выводить тексты на русском языке.

Вот так выглядят упрощенные модели (только основные поля):

# Дочерняя таблица текстов записей, использует абстрактный класс LingvaEnhavoAbstrakta
class EnskriboTeksto(LingvaEnhavoAbstrakta):

    # UUID записи
    uuid = models.UUIDField(_('UUID'), primary_key=True, default=uuid4, editable=False)
    # дата и время создания
    krea_dato = models.DateTimeField(_('Krea dato'), auto_now_add=True, auto_now=False, blank=False)
    # имя родительского класса в котором нужное поле, имя взято в кавычки, так как класс ещё не объявлен
    posedanto = models.ForeignKey('Enskribo')

    class Meta:
        db_table = 'enskriboj_tekstoj'


# Записи 
class Enskribo(models.Model):

    # UUID записи
    uuid = models.UUIDField(_('UUID'), primary_key=True, default=uuid4, editable=False)
    # дата и время создания
    krea_dato = models.DateTimeField(_('Krea dato'), auto_now_add=True, auto_now=False, blank=False)
    # текст в дочерней таблице текстов
    teksto = models.ForeignKey(EnskriboTeksto, verbose_name=_('Teksto'), blank=True, null=True)

    class Meta:
        db_table = 'enskriboj'


Вот так выглядит абстрактный класс многоязычного контента, Homo (человек) - это отдельная от стандартной Джанговской модель / таблица пользователей:
class LingvaEnhavoAbstrakta(models.Model):
    @staticmethod
    def model_name_ticket():
        return '%(app_label)s_%(class)s_'

    # UUID записи
    uuid = models.UUIDField(_('UUID'), primary_key=True, default=uuid4, editable=False)
    # дата и время создания
    krea_dato = models.DateTimeField(_('Krea dato'), auto_now_add=True, auto_now=False, blank=False)
    # владелец (главная запись для которой создаётся мультиязычный контент)
    posedanto = models.UUIDField(_('Posedanta UUID'), blank=False, db_index=True)
    # выбор языкового кода из справочника
    lingvo = models.ForeignKey(LingvaKodo, verbose_name=_('Lingvo'), blank=False, default=None)
    # содержимое (СОЗДАЁТСЯ ТО ПОЛЕ ИЗ КОТОРОГО НУЖНО БРАТЬ ТЕКСТ)
    enhavo = models.TextField(_('Enhavo'))
    # автор содержимого (пользователь)
    autoro = models.ForeignKey(Homo, verbose_name=_('Aŭtoro'))
    # пользователь последний обновивший запись
    lasta_renoviginta_uzanto = models.ForeignKey(Homo, related_name=model_name_ticket.__func__() + 'LastRenUzanto',
                                                 verbose_name=_('Lasta renoviginta uzanto'), blank=True, null=True)
    # последняя дата и время обновления
    lasta_renoviga_dato = models.DateTimeField(_('Lasta renoviga dato'), blank=True, null=True)

    class Meta:
        abstract = True


Если применить во views обычную конструкцию, то она естественно выведет даты создания, но вместо текста будут None, потому что в родительской таблице это поле пустое, текст в дочерней таблице:

def blogo(request):
    enskriboj = Enskribo.objects.filter(krea_dato__lte=timezone.now()).order_by('krea_dato')
    return render(request, 'blogo/blogo.html', {'enskriboj': enskriboj})


В шаблоне упрощённо вот так:

{% for enskribo in enskriboj %}
{{ enskribo.krea_dato }}
{{ enskribo.teksto }}
{% endfor %}


Подскажите пожалуйста, как сделать во views и шаблоне, чтобы в дочерней таблице 'enskriboj_tekstoj' находились по 'uuid' в поле 'posedanto' нужные записи и выводился текст из поля 'enhavo' той записи, в которой в поле 'lingvo' стоит языковой код 'ru'?
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы