V
V
Vladimir2017-09-13 08:38:45
Django
Vladimir, 2017-09-13 08:38:45

How to display the text with the RU language tag from the child table with texts in a multilingual system?

Hello. Python 3.6.2 / Django 1.11.5 is used.
There is a code that allows you to create, for example, for post texts and / or headings, variants in different languages ​​(the code is given below). It is necessary to display texts in Russian from the created child table.
This is how the simplified models look like (only the main fields):

# Дочерняя таблица текстов записей, использует абстрактный класс 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'

This is how the abstract class of multilingual content looks like, Homo (person) is a separate user model / table from the standard Jang:
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

If you apply the usual construction in views, then it will naturally display the dates of creation, but instead of the text there will be None, because in the parent table this field is empty, the text in the child table:
def blogo(request):
    enskriboj = Enskribo.objects.filter(krea_dato__lte=timezone.now()).order_by('krea_dato')
    return render(request, 'blogo/blogo.html', {'enskriboj': enskriboj})

The template is simplified like this:
{% for enskribo in enskriboj %}
{{ enskribo.krea_dato }}
{{ enskribo.teksto }}
{% endfor %}

Please tell me how to make in the views and template so that in the child table 'enskriboj_tekstoj' there are 'uuid' in the 'posedanto' field the necessary records and the text is displayed from the 'enhavo' field of the record in which the language code is in the 'lingvo' field 'ru'?

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question