"""News app models.""" from django.db import models from django.utils.translation import gettext_lazy as _ from utils.models import BaseAttributes, TJSONField, TraslatedFieldsMixin class NewsType(models.Model): """NewsType model.""" name = models.CharField(_('name'), max_length=250) class Meta: verbose_name_plural = _('news types') verbose_name = _('news type') def __str__(self): return self.name class NewsQuerySet(models.QuerySet): """QuerySet for model News""" def by_type(self, news_type): """Filter News by type""" return self.filter(news_type__name=news_type) def by_country_code(self, code): """Filter collection by country code.""" return self.filter(country__code=code) def published(self): """Return only published news""" return self.filter(is_publish=True) class News(BaseAttributes, TraslatedFieldsMixin): """News model.""" image = models.ForeignKey( 'gallery.Image', null=True, blank=True, default=None, verbose_name=_('News image'), on_delete=models.CASCADE) news_type = models.ForeignKey( NewsType, verbose_name=_('news type'), on_delete=models.CASCADE) title = TJSONField( _('title'), null=True, blank=True, default=None, help_text='{"en":"some text"}') subtitle = TJSONField( _('subtitle'), null=True, blank=True, default=None, help_text='{"en":"some text"}' ) description = TJSONField( _('description'), null=True, blank=True, default=None, help_text='{"en":"some text"}' ) start = models.DateTimeField(_('start')) end = models.DateTimeField(_('end')) playlist = models.IntegerField(_('playlist')) address = models.ForeignKey( 'location.Address', verbose_name=_('address'), blank=True, null=True, default=None, on_delete=models.CASCADE) is_publish = models.BooleanField( default=False, verbose_name=_('Publish status')) country = models.ForeignKey( 'location.Country', blank=True, null=True, verbose_name=_('country'), on_delete=models.CASCADE) is_highlighted = models.BooleanField( default=False, verbose_name=_('Is highlighted')) # TODO: metadata_keys - описание ключей для динамического построения полей метаданных # TODO: metadata_values - Описание значений для динамических полей из MetadataKeys objects = NewsQuerySet.as_manager() class Meta: verbose_name = _('news') verbose_name_plural = _('news') def __str__(self): return f'news: {self.id}'