Здравствуйте. Используется 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'?