GM-25: Получение главной зоны

This commit is contained in:
Anatoly 2019-09-13 18:08:36 +03:00
parent 10d9b52bec
commit 555aa9a4e1
7 changed files with 136 additions and 9 deletions

View File

@ -46,3 +46,6 @@ class CurrencContentAdmin(admin.ModelAdmin):
"""CurrencContent admin"""
@admin.register(models.Carousel)
class CarouselAdmin(admin.ModelAdmin):
"""Carousel admin."""

View File

@ -0,0 +1,27 @@
# Generated by Django 2.2.4 on 2019-09-13 11:33
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('main', '0013_auto_20190901_1032'),
]
operations = [
migrations.CreateModel(
name='Carousel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('object_id', models.PositiveIntegerField()),
('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
],
options={
'verbose_name': 'Carousel',
'verbose_name_plural': 'Carousel',
},
),
]

View File

@ -7,7 +7,9 @@ from django.utils.translation import gettext_lazy as _
from django.contrib.contenttypes.models import ContentType
from location.models import Country
from main import methods
from utils.models import ProjectBaseMixin, TJSONField, TranslatedFieldsMixin
from utils.models import (ProjectBaseMixin, TJSONField,
TranslatedFieldsMixin, ImageMixin)
from utils.querysets import ContentTypeQuerySetMixin
from configuration.models import TranslationSettings
#
@ -253,6 +255,10 @@ class MetaData(TranslatedFieldsMixin, models.Model):
return f'id:{self.id}-{label}'
class MetaDataContentQuerySet(ContentTypeQuerySetMixin):
"""QuerySets for MetaDataContent model."""
class MetaDataContent(models.Model):
"""MetaDataContent model."""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
@ -260,6 +266,8 @@ class MetaDataContent(models.Model):
content_object = generic.GenericForeignKey('content_type', 'object_id')
metadata = models.ForeignKey(MetaData, on_delete=models.CASCADE)
objects = MetaDataContentQuerySet.as_manager()
class Currency(models.Model):
"""Currency model."""
@ -271,3 +279,53 @@ class Currency(models.Model):
def __str__(self):
return f'{self.name}'
class CarouselQuerySet(models.QuerySet):
"""Carousel QuerySet."""
class Carousel(models.Model):
"""Carousel model."""
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
objects = CarouselQuerySet.as_manager()
class Meta:
"""Meta class."""
verbose_name = _('Carousel')
verbose_name_plural = _('Carousel')
@property
def name(self):
if hasattr(self.content_object, 'name'):
return self.content_object.name
if hasattr(self.content_object, 'title'):
return self.content_object.title_translated
@property
def awards(self):
if hasattr(self.content_object, 'awards'):
return self.content_object.awards
@property
def toque_number(self):
if hasattr(self.content_object, 'toque_number'):
return self.content_object.toque_number
@property
def public_mark(self):
if hasattr(self.content_object, 'public_mark'):
return self.content_object.public_mark
@property
def image(self):
if not hasattr(self.content_object.image, 'url'):
return self.content_object.image.image.url
return self.content_object.image.url
@property
def model_name(self):
return self.content_object.__class__.__name__

View File

@ -1,5 +1,6 @@
"""Main app serializers."""
from rest_framework import serializers
from location.serializers import CountrySerializer
from main import models
@ -82,8 +83,8 @@ class SiteSerializer(serializers.ModelSerializer):
# )
class AwardSerializer(serializers.ModelSerializer):
"""Award serializer."""
class AwardBaseSerializer(serializers.ModelSerializer):
"""Award base serializer."""
title_translated = serializers.CharField(read_only=True, allow_null=True)
@ -92,11 +93,18 @@ class AwardSerializer(serializers.ModelSerializer):
fields = [
'id',
'title_translated',
'award_type',
'vintage_year',
]
class AwardSerializer(AwardBaseSerializer):
"""Award serializer."""
class Meta:
model = models.Award
fields = AwardBaseSerializer.Meta.fields + ['award_type', ]
class MetaDataContentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='metadata.id', read_only=True,)
label_translated = serializers.CharField(
@ -117,4 +125,27 @@ class CurrencySerializer(serializers.ModelSerializer):
fields = [
'id',
'name'
]
]
class CarouselListSerializer(serializers.ModelSerializer):
"""Serializer for retrieving list of carousel items."""
model_name = serializers.CharField()
name = serializers.CharField()
toque_number = serializers.CharField()
public_mark = serializers.CharField()
image = serializers.URLField()
awards = AwardBaseSerializer(many=True)
class Meta:
"""Meta class."""
model = models.Carousel
fields = [
'id',
'model_name',
'name',
'awards',
'toque_number',
'public_mark',
'image',
]

View File

@ -10,4 +10,5 @@ urlpatterns = [
path('site-settings/<subdomain>/', views.SiteSettingsView.as_view(), name='site-settings'),
path('awards/', views.AwardView.as_view(), name='awards_list'),
path('awards/<int:pk>/', views.AwardRetrieveView.as_view(), name='awards_retrieve'),
path('carousel/', views.CarouselListView.as_view(), name='carousel-list'),
]

View File

@ -84,3 +84,11 @@ class AwardRetrieveView(generics.RetrieveAPIView):
serializer_class = serializers.AwardSerializer
queryset = models.Award.objects.all()
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
class CarouselListView(generics.ListAPIView):
"""Return list of carousel items."""
queryset = models.Carousel.objects.all()
serializer_class = serializers.CarouselListSerializer
permission_classes = (permissions.AllowAny, )
pagination_class = None

View File

@ -83,7 +83,6 @@ def generate_string_code(size=64,
def get_contenttype(app_label: str, model: str):
"""Get ContentType instance by app_label and model"""
if app_label and model:
qs = ContentType.objects.filter(app_label=app_label, model=model)
if qs.exists():
return qs.first()
qs = ContentType.objects.filter(app_label=app_label, model=model)
if qs.exists():
return qs.first()