Интернационализация моделей в Django
Есть обычная модель в Django:
class Article(models.Model):
status = models.BooleanField(verbose_name="Активна")
date = models.DateField(verbose_name="Дата",auto_now=False, auto_now_add=False)
name_short = models.CharField(max_length=100, verbose_name="Короткое название")
name_full = models.CharField(max_length=300, verbose_name="Длинное название", null=True, blank=True)
content_full = models.TextField(verbose_name="Содержимое страницы", null=True, blank=True)
content_preview = models.TextField(verbose_name="Превью-текст", null=True, blank=True)
##
page_url = models.CharField(max_length=100, verbose_name="URL")
page_title = models.CharField(max_length=300, verbose_name="Title", null=True, blank=True)
page_description = models.CharField(max_length=300, verbose_name="Desc", null=True, blank=True)
page_keywords = models.CharField(max_length=300, verbose_name="Keys", null=True, blank=True)
##
def __str__(self):
return '%s' % (self.name_short)
Задача сделать так чтобы некоторые поля: name_short, name_full, content_full и т.д. могли быть заполнены в других языках которые прописаны в settings.py
я так понимаю решения "из коробки" как для перевода текста в шаблонах нет
Ответы (1 шт):
Автор решения: Vadim.Sharoikin
→ Ссылка
из коробки нет. Надо самому что-то костылить или использовать готовые библиотеки. Например эту.
Описывать установку и настройку не буду. Все есть в документации.
В models.py в translations нужно добавить все поля которые будут переводиться.
from parler.models import TranslatableModel, TranslatedFields
class Article(TranslatableModel):
translations = TranslatedFields(
name_short = models.CharField(max_length=100, verbose_name="Короткое название"),
name_full = models.CharField(max_length=300, verbose_name="Длинное название", null=True, blank=True),
content_full = models.TextField(verbose_name="Содержимое страницы", null=True, blank=True),
)
status = models.BooleanField(verbose_name="Активна")
date = models.DateField(verbose_name="Дата",auto_now=False, auto_now_add=False)
content_preview = models.TextField(verbose_name="Превью-текст", null=True, blank=True)
##
page_url = models.CharField(max_length=100, verbose_name="URL")
page_title = models.CharField(max_length=300, verbose_name="Title", null=True, blank=True)
page_description = models.CharField(max_length=300, verbose_name="Desc", null=True, blank=True)
page_keywords = models.CharField(max_length=300, verbose_name="Keys", null=True, blank=True)
##
def __str__(self):
return '%s' % (self.name_short)
В admin.py
from parler.admin import TranslatableAdmin
@admin.register(Article)
class CategoryAdmin(TranslatableAdmin):
list_display = ['name_short','name_full','content_full']