Merge branch 'feature/default-images' into 'develop'

Feature/default images

See merge request gm/gm-backend!231
This commit is contained in:
Олег Хаятов 2020-01-22 12:39:04 +00:00
commit b12253fb6b
5 changed files with 62 additions and 4 deletions

View File

@ -0,0 +1,31 @@
# Generated by Django 2.2.7 on 2020-01-21 09:40
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('gallery', '0008_merge_20191212_0752'),
('news', '0051_merge_20191223_1405'),
]
operations = [
migrations.AddField(
model_name='newstype',
name='created',
field=models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created'),
),
migrations.AddField(
model_name='newstype',
name='default_image',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='news_types', to='gallery.Image', verbose_name='default image'),
),
migrations.AddField(
model_name='newstype',
name='modified',
field=models.DateTimeField(auto_now=True, verbose_name='Date updated'),
),
]

View File

@ -18,7 +18,7 @@ from main.models import Carousel
from rating.models import Rating, ViewCount from rating.models import Rating, ViewCount
from utils.models import (BaseAttributes, TJSONField, TranslatedFieldsMixin, HasTagsMixin, from utils.models import (BaseAttributes, TJSONField, TranslatedFieldsMixin, HasTagsMixin,
ProjectBaseMixin, GalleryMixin, IntermediateGalleryModelMixin, ProjectBaseMixin, GalleryMixin, IntermediateGalleryModelMixin,
FavoritesMixin) FavoritesMixin, TypeDefaultImageMixin)
from utils.querysets import TranslationQuerysetMixin from utils.querysets import TranslationQuerysetMixin
from datetime import datetime from datetime import datetime
@ -51,13 +51,26 @@ class NewsBanner(ProjectBaseMixin, TranslatedFieldsMixin):
blank=True, null=True, default=None) blank=True, null=True, default=None)
class NewsType(models.Model): class NewsTypeQuerySet(models.QuerySet):
"""QuerySet for model NewsType"""
def with_base_related(self):
return self.select_related('default_image')
class NewsType(ProjectBaseMixin, TypeDefaultImageMixin):
"""NewsType model.""" """NewsType model."""
name = models.CharField(_('name'), max_length=250) name = models.CharField(_('name'), max_length=250)
tag_categories = models.ManyToManyField('tag.TagCategory', tag_categories = models.ManyToManyField('tag.TagCategory',
related_name='news_types') related_name='news_types')
default_image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
related_name='news_types',
blank=True, null=True, default=None,
verbose_name='default image')
objects = NewsTypeQuerySet.as_manager()
class Meta: class Meta:
"""Meta class.""" """Meta class."""

View File

@ -62,12 +62,14 @@ class NewsBannerSerializer(ProjectModelSerializer):
class NewsTypeSerializer(serializers.ModelSerializer): class NewsTypeSerializer(serializers.ModelSerializer):
"""News type serializer.""" """News type serializer."""
default_image_url = serializers.ImageField(source='default_image.image',
allow_null=True)
class Meta: class Meta:
"""Meta class.""" """Meta class."""
model = models.NewsType model = models.NewsType
fields = ('id', 'name') fields = ('id', 'name', 'default_image_url')
class NewsBaseSerializer(ProjectModelSerializer): class NewsBaseSerializer(ProjectModelSerializer):

View File

@ -89,9 +89,12 @@ class NewsTypeListView(generics.ListAPIView):
pagination_class = None pagination_class = None
permission_classes = (permissions.AllowAny,) permission_classes = (permissions.AllowAny,)
queryset = models.NewsType.objects.all()
serializer_class = serializers.NewsTypeSerializer serializer_class = serializers.NewsTypeSerializer
def get_queryset(self):
"""Override get_queryset method."""
return models.NewsType.objects.with_base_related()
class NewsBackOfficeMixinView: class NewsBackOfficeMixinView:
"""News back office mixin view.""" """News back office mixin view."""

View File

@ -177,3 +177,12 @@ class ProductDocument(Document):
def get_queryset(self): def get_queryset(self):
return super().get_queryset().published().with_base_related() return super().get_queryset().published().with_base_related()
def get_instances_from_related(self, related_instance):
"""If related_models is set, define how to retrieve the Product instance(s) from the related model.
The related_models option should be used with caution because it can lead in the index
to the updating of a lot of items.
"""
if isinstance(related_instance, models.ProductType) and hasattr(related_instance, 'product_set'):
return related_instance.product_set().all()