"""Translation app models.""" from django.contrib.postgres.fields import JSONField from django.db import models from django.utils.translation import gettext_lazy as _ from utils.models import ProjectBaseMixin, LocaleManagerMixin class LanguageQuerySet(models.QuerySet): """QuerySet for model Language""" def by_locale(self, locale: str) -> models.QuerySet: """Filter by locale""" return self.filter(locale=locale) def by_title(self, title: str) -> models.QuerySet: """Filter by title""" return self.filter(title=title) class Language(models.Model): """Language model.""" title = models.CharField(max_length=255, verbose_name=_('Language title')) locale = models.CharField(max_length=10, verbose_name=_('Locale identifier')) objects = LanguageQuerySet.as_manager() class Meta: """Meta class.""" verbose_name = _('Language') verbose_name_plural = _('Languages') def __str__(self): """String method""" return f'{self.title} ({self.locale})' class SiteInterfaceDictionaryManager(LocaleManagerMixin): """Extended manager for SiteInterfaceDictionary model.""" class SiteInterfaceDictionary(ProjectBaseMixin): """Site interface dictionary model.""" page = models.CharField(max_length=255, db_index=True, verbose_name=_('Page')) keywords = models.CharField(max_length=255, verbose_name='Keywords') text = JSONField(_('Text'), null=True, blank=True, default=None, help_text='{"en-GB":"some text"}') objects = SiteInterfaceDictionaryManager() class Meta: """Meta class.""" verbose_name = _('Site interface dictionary') verbose_name_plural = _('Site interface dictionary') def __str__(self): return f'{self.page}: {self.keywords}'