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, BaseAttributes, LocaleManagerMixin 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 NewsManager(LocaleManagerMixin): """Manager for model News""" 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) class News(BaseAttributes): """News model.""" news_type = models.ForeignKey( NewsType, verbose_name=_('news type'), on_delete=models.CASCADE) title = JSONField( _('title'), null=True, blank=True, default=None, help_text='{"en":"some text"}') subtitle = JSONField( _('subtitle'), null=True, blank=True, default=None, help_text='{"en":"some text"}' ) description = JSONField( _('subtitle'), 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) # TODO: metadata_keys - описание ключей для динамического построения полей метаданных # TODO: metadata_values - Описание значений для динамических полей из MetadataKeys objects = NewsManager.from_queryset(NewsQuerySet)() class Meta: verbose_name = _('news') verbose_name_plural = _('news') def __str__(self): return f'news: {self.id}'