Merge branch 'feature/advertisements_update' into 'develop'

Feature/advertisements update

See merge request gm/gm-backend!8
This commit is contained in:
d.kuzmenko 2019-09-19 07:05:32 +00:00
commit aff68fe288
9 changed files with 117 additions and 22 deletions

View File

@ -0,0 +1,35 @@
# Generated by Django 2.2.4 on 2019-09-17 13:07
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
dependencies = [
('translation', '0003_auto_20190901_1032'),
('advertisement', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='advertisement',
name='source',
field=models.PositiveSmallIntegerField(choices=[(0, 'Mobile'), (1, 'Web')], default=0, verbose_name='Source'),
),
migrations.AddField(
model_name='advertisement',
name='target_languages',
field=models.ManyToManyField(to='translation.Language'),
),
migrations.AddField(
model_name='advertisement',
name='uuid',
field=models.UUIDField(default=uuid.UUID('5fcaa103-a7da-49ad-be7e-1292371f008e'), editable=False, unique=True),
),
migrations.AlterField(
model_name='advertisement',
name='block_level',
field=models.CharField(max_length=10, verbose_name='Block level'),
),
]

View File

@ -1,28 +1,22 @@
"""Advertisement app models.""" """Advertisement app models."""
import uuid
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from utils.models import ProjectBaseMixin, ImageMixin from translation.models import Language
from utils.models import ProjectBaseMixin, ImageMixin, PlatformMixin
class Advertisement(ImageMixin, ProjectBaseMixin): class Advertisement(ImageMixin, ProjectBaseMixin, PlatformMixin):
"""Advertisement model.""" """Advertisement model."""
LEVEL_1 = 1 uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
LEVEL_2 = 2
LEVEL_3 = 3
BLOCK_LEVEL_CHOICES = (
(LEVEL_1, _('Ad block level 1')),
(LEVEL_2, _('Ad block level 2')),
(LEVEL_3, _('Ad block level 3'))
)
url = models.URLField(verbose_name=_('Ad URL')) url = models.URLField(verbose_name=_('Ad URL'))
width = models.PositiveIntegerField(verbose_name=_('Block width')) width = models.PositiveIntegerField(verbose_name=_('Block width'))
height = models.PositiveIntegerField(verbose_name=_('Block height')) height = models.PositiveIntegerField(verbose_name=_('Block height'))
block_level = models.PositiveSmallIntegerField(choices=BLOCK_LEVEL_CHOICES, block_level = models.CharField(verbose_name=_('Block level'), max_length=10)
verbose_name=_('Block level')) target_languages = models.ManyToManyField(Language)
class Meta: class Meta:
verbose_name = _('Advertisement') verbose_name = _('Advertisement')

View File

@ -2,6 +2,7 @@
from rest_framework import serializers from rest_framework import serializers
from advertisement import models from advertisement import models
from translation.serializers import LanguageSerializer
class AdvertisementSerializer(serializers.ModelSerializer): class AdvertisementSerializer(serializers.ModelSerializer):
@ -11,9 +12,11 @@ class AdvertisementSerializer(serializers.ModelSerializer):
model = models.Advertisement model = models.Advertisement
fields = ( fields = (
'id', 'id',
'uuid',
'url', 'url',
'image', 'image',
'width', 'width',
'height', 'height',
'block_level', 'block_level',
'source'
) )

View File

@ -3,8 +3,8 @@ from django.urls import path
from advertisement.views import web as views from advertisement.views import web as views
app_name = 'advertisement' app_name = 'advertisements'
urlpatterns = [ urlpatterns = [
path('', views.AdvertisementListView.as_view(), name='list') path('<str:page>/', views.AdvertisementListView.as_view(), name='list')
] ]

View File

@ -10,6 +10,10 @@ class AdvertisementListView(generics.ListAPIView):
"""List view for model Advertisement""" """List view for model Advertisement"""
pagination_class = None pagination_class = None
model = models.Advertisement model = models.Advertisement
permission_classes = (permissions.AllowAny, ) permission_classes = (permissions.AllowAny,)
queryset = models.Advertisement.objects.all()
serializer_class = serializers.AdvertisementSerializer serializer_class = serializers.AdvertisementSerializer
def get_queryset(self):
return models.Advertisement.objects\
.filter(page__page_name__contains=self.kwargs['page'])\
.filter(target_languages__locale=self.request.locale)

View File

@ -0,0 +1,26 @@
# Generated by Django 2.2.4 on 2019-09-17 13:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('advertisement', '0002_auto_20190917_1307'),
('main', '0014_carousel'),
]
operations = [
migrations.CreateModel(
name='Page',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('page_name', models.CharField(max_length=255, unique=True)),
('advertisements', models.ManyToManyField(to='advertisement.Advertisement')),
],
options={
'verbose_name': 'Page',
'verbose_name_plural': 'Pages',
},
),
]

View File

@ -5,6 +5,8 @@ from django.contrib.postgres.fields import JSONField
from django.db import models from django.db import models
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from advertisement.models import Advertisement
from location.models import Country from location.models import Country
from main import methods from main import methods
from review.models import Review from review.models import Review
@ -341,3 +343,18 @@ class Carousel(models.Model):
@property @property
def model_name(self): def model_name(self):
return self.content_object.__class__.__name__ return self.content_object.__class__.__name__
class Page(models.Model):
"""Page model."""
page_name = models.CharField(max_length=255, unique=True)
advertisements = models.ManyToManyField(Advertisement)
class Meta:
"""Meta class."""
verbose_name = _('Page')
verbose_name_plural = _('Pages')
def __str__(self):
return f'{self.page_name}'

View File

@ -1,6 +1,7 @@
"""Main app serializers.""" """Main app serializers."""
from rest_framework import serializers from rest_framework import serializers
from advertisement.serializers.web import AdvertisementSerializer
from location.serializers import CountrySerializer from location.serializers import CountrySerializer
from main import models from main import models
@ -20,7 +21,6 @@ class FeatureSerializer(serializers.ModelSerializer):
class SiteFeatureSerializer(serializers.ModelSerializer): class SiteFeatureSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='feature.id') id = serializers.IntegerField(source='feature.id')
slug = serializers.CharField(source='feature.slug') slug = serializers.CharField(source='feature.slug')
priority = serializers.IntegerField(source='feature.priority') priority = serializers.IntegerField(source='feature.priority')
@ -40,7 +40,7 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
published_features = SiteFeatureSerializer(source='published_sitefeatures', published_features = SiteFeatureSerializer(source='published_sitefeatures',
many=True, allow_null=True) many=True, allow_null=True)
#todo: remove this # todo: remove this
country_code = serializers.CharField(source='subdomain', read_only=True) country_code = serializers.CharField(source='subdomain', read_only=True)
class Meta: class Meta:
@ -62,7 +62,6 @@ class SiteSettingsSerializer(serializers.ModelSerializer):
class SiteSerializer(serializers.ModelSerializer): class SiteSerializer(serializers.ModelSerializer):
country = CountrySerializer() country = CountrySerializer()
class Meta: class Meta:
@ -110,7 +109,7 @@ class AwardSerializer(AwardBaseSerializer):
class MetaDataContentSerializer(serializers.ModelSerializer): class MetaDataContentSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source='metadata.id', read_only=True,) id = serializers.IntegerField(source='metadata.id', read_only=True, )
label_translated = serializers.CharField( label_translated = serializers.CharField(
source='metadata.label_translated', read_only=True, allow_null=True) source='metadata.label_translated', read_only=True, allow_null=True)
@ -124,6 +123,7 @@ class MetaDataContentSerializer(serializers.ModelSerializer):
class CurrencySerializer(serializers.ModelSerializer): class CurrencySerializer(serializers.ModelSerializer):
"""Currency serializer""" """Currency serializer"""
class Meta: class Meta:
model = models.Currency model = models.Currency
fields = [ fields = [
@ -155,3 +155,17 @@ class CarouselListSerializer(serializers.ModelSerializer):
'image', 'image',
'vintage_year', 'vintage_year',
] ]
class PageSerializer(serializers.ModelSerializer):
page_name = serializers.CharField()
advertisements = AdvertisementSerializer(source='advertisements', many=True)
class Meta:
"""Meta class."""
model = models.Carousel
fields = [
'id',
'page_name',
'advertisements'
]

View File

@ -186,10 +186,12 @@ class PlatformMixin(models.Model):
MOBILE = 0 MOBILE = 0
WEB = 1 WEB = 1
ALL = 2
SOURCES = ( SOURCES = (
(MOBILE, _('Mobile')), (MOBILE, _('Mobile')),
(WEB, _('Web')), (WEB, _('Web')),
(ALL, _('All'))
) )
source = models.PositiveSmallIntegerField(choices=SOURCES, default=MOBILE, source = models.PositiveSmallIntegerField(choices=SOURCES, default=MOBILE,
verbose_name=_('Source')) verbose_name=_('Source'))