From e3ad562680a01124673ad095dfad501db5b6d095 Mon Sep 17 00:00:00 2001 From: evgeniy-st Date: Wed, 28 Aug 2019 18:30:35 +0300 Subject: [PATCH] update news model --- .../migrations/0008_auto_20190828_1522.py | 29 +++++++++++++++++++ apps/news/models.py | 26 +++++------------ apps/news/serializers/common.py | 24 +++++++-------- apps/news/views/common.py | 3 +- 4 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 apps/news/migrations/0008_auto_20190828_1522.py diff --git a/apps/news/migrations/0008_auto_20190828_1522.py b/apps/news/migrations/0008_auto_20190828_1522.py new file mode 100644 index 00000000..9daedd30 --- /dev/null +++ b/apps/news/migrations/0008_auto_20190828_1522.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.4 on 2019-08-28 15:22 + +from django.db import migrations +import utils.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('news', '0007_news_image'), + ] + + operations = [ + migrations.AlterField( + model_name='news', + name='description', + field=utils.models.TJSONField(blank=True, default=None, help_text='{"en":"some text"}', null=True, verbose_name='description'), + ), + migrations.AlterField( + model_name='news', + name='subtitle', + field=utils.models.TJSONField(blank=True, default=None, help_text='{"en":"some text"}', null=True, verbose_name='subtitle'), + ), + migrations.AlterField( + model_name='news', + name='title', + field=utils.models.TJSONField(blank=True, default=None, help_text='{"en":"some text"}', null=True, verbose_name='title'), + ), + ] diff --git a/apps/news/models.py b/apps/news/models.py index 9228f86f..b6493a9b 100644 --- a/apps/news/models.py +++ b/apps/news/models.py @@ -1,10 +1,7 @@ -from django.contrib.postgres.fields import JSONField +"""News app models.""" from django.db import models from django.utils.translation import gettext_lazy as _ -from django.utils.translation import get_language - -from utils.models import (ProjectBaseMixin, BaseAttributes, - LocaleManagerMixin, ImageMixin) +from utils.models import BaseAttributes, TJSONField, TraslatedFieldsMixin class NewsType(models.Model): @@ -19,10 +16,6 @@ class NewsType(models.Model): return self.name -class NewsManager(LocaleManagerMixin): - """Manager for model News""" - - class NewsQuerySet(models.QuerySet): """QuerySet for model News""" def by_type(self, news_type): @@ -38,22 +31,23 @@ class NewsQuerySet(models.QuerySet): return self.filter(is_publish=True) -class News(BaseAttributes): +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 = JSONField( + title = TJSONField( _('title'), null=True, blank=True, default=None, help_text='{"en":"some text"}') - subtitle = JSONField( + subtitle = TJSONField( _('subtitle'), null=True, blank=True, default=None, help_text='{"en":"some text"}' ) - description = JSONField( + description = TJSONField( _('description'), null=True, blank=True, default=None, help_text='{"en":"some text"}' ) @@ -73,7 +67,7 @@ class News(BaseAttributes): # TODO: metadata_keys - описание ключей для динамического построения полей метаданных # TODO: metadata_values - Описание значений для динамических полей из MetadataKeys - objects = NewsManager.from_queryset(NewsQuerySet)() + objects = NewsQuerySet.as_manager() class Meta: verbose_name = _('news') @@ -82,7 +76,3 @@ class News(BaseAttributes): def __str__(self): return f'news: {self.id}' - @property - def test_trans(self): - language = get_language() - return self.title.get(language) diff --git a/apps/news/serializers/common.py b/apps/news/serializers/common.py index 94313268..bb041071 100644 --- a/apps/news/serializers/common.py +++ b/apps/news/serializers/common.py @@ -16,17 +16,13 @@ class NewsTypeSerializer(serializers.ModelSerializer): ] -class NewsLocalizationMixinSerializer(serializers.ModelSerializer): - """Serializer for localized fields""" - # Localized fields - title_trans = serializers.CharField(read_only=True) - subtitle_trans = serializers.CharField(read_only=True) - description_trans = serializers.CharField(read_only=True) - - -class NewsSerializer(NewsLocalizationMixinSerializer): +class NewsSerializer(serializers.ModelSerializer): """News serializer.""" + address = AddressSerializer() + title_translated = serializers.CharField(read_only=True, allow_null=True) + subtitle_translated = serializers.CharField(read_only=True, allow_null=True) + description_translated = serializers.CharField(read_only=True, allow_null=True) image_url = serializers.SerializerMethodField() class Meta: @@ -41,14 +37,16 @@ class NewsSerializer(NewsLocalizationMixinSerializer): 'is_highlighted', 'image_url', # Localized fields - 'title_trans', - 'subtitle_trans', - 'description_trans', + 'title_translated', + 'subtitle_translated', + 'description_translated', ] def get_image_url(self, obj): """Return absolute image URL""" - return obj.image.get_full_image_url(request=self.context.get('request')) + if obj.image: + return obj.image.get_full_image_url(request=self.context.get('request')) + return None class NewsCreateUpdateSerializer(NewsSerializer): diff --git a/apps/news/views/common.py b/apps/news/views/common.py index 7e706ddb..82c77068 100644 --- a/apps/news/views/common.py +++ b/apps/news/views/common.py @@ -24,8 +24,7 @@ class NewsListView(NewsViewMixin, JWTListAPIView): def get_queryset(self, *args, **kwargs): """Override get_queryset method""" - return News.objects.annotate_localized_fields(locale=self.request.locale)\ - .published()\ + return News.objects.published()\ .by_country_code(code=self.request.country_code)\ .order_by('-is_highlighted', '-created')