refactored ads
This commit is contained in:
parent
907a9365e1
commit
fb5a9d4302
|
|
@ -14,3 +14,8 @@ class PageInline(admin.TabularInline):
|
||||||
class AdvertisementModelAdmin(admin.ModelAdmin):
|
class AdvertisementModelAdmin(admin.ModelAdmin):
|
||||||
"""Admin model for model Advertisement"""
|
"""Admin model for model Advertisement"""
|
||||||
inlines = (PageInline, )
|
inlines = (PageInline, )
|
||||||
|
list_display = ('id', '__str__', 'block_level',
|
||||||
|
'start', 'end', 'page_type')
|
||||||
|
list_filter = ('url', 'block_level', 'start', 'end', 'page_type',
|
||||||
|
'pages__source')
|
||||||
|
date_hierarchy = 'created'
|
||||||
|
|
|
||||||
|
|
@ -71,11 +71,11 @@ class Advertisement(ProjectBaseMixin):
|
||||||
return super().delete(using, keep_parents)
|
return super().delete(using, keep_parents)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def mobile_page(self):
|
def mobile_pages(self):
|
||||||
"""Return mobile page"""
|
"""Return mobile page"""
|
||||||
return self.pages.by_platform(Page.MOBILE).first()
|
return self.pages.by_platform(Page.MOBILE)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def web_page(self):
|
def web_pages(self):
|
||||||
"""Return web page"""
|
"""Return web page"""
|
||||||
return self.pages.by_platform(Page.WEB).first()
|
return self.pages.by_platform(Page.WEB)
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,14 @@
|
||||||
"""Serializers for back office app advertisements"""
|
"""Serializers for back office app advertisements"""
|
||||||
from main.serializers import PageBaseSerializer
|
from advertisement.serializers import AdvertisementBaseSerializer
|
||||||
|
from main.serializers import PageExtendedSerializer
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageBaseSerializer(PageBaseSerializer):
|
class AdvertisementDetailSerializer(AdvertisementBaseSerializer):
|
||||||
"""Base serializer for linking page w/ advertisement."""
|
"""Advertisement serializer for back office."""
|
||||||
|
pages = PageExtendedSerializer(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta(PageBaseSerializer.Meta):
|
class Meta(AdvertisementBaseSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
fields = AdvertisementBaseSerializer.Meta.fields + [
|
||||||
PageBaseSerializer.Meta.extra_kwargs.update({
|
'pages',
|
||||||
'advertisement': {'write_only': True},
|
]
|
||||||
'image_url': {'required': True},
|
|
||||||
'width': {'required': True},
|
|
||||||
'height': {'required': True},
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageListCreateSerializer(AdvertisementPageBaseSerializer):
|
|
||||||
"""Serializer for linking page w/ advertisement."""
|
|
||||||
|
|
||||||
def create(self, validated_data):
|
|
||||||
"""Overridden create method."""
|
|
||||||
|
|
||||||
validated_data['advertisement'] = self.context.get('view').get_object()
|
|
||||||
return super().create(validated_data)
|
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,15 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from advertisement import models
|
from advertisement import models
|
||||||
from translation.serializers import LanguageSerializer
|
|
||||||
from main.serializers import SiteShortSerializer, PageBaseSerializer
|
|
||||||
from translation.models import Language
|
|
||||||
from main.models import SiteSettings
|
from main.models import SiteSettings
|
||||||
|
from main.serializers import PageTypeBaseSerializer
|
||||||
|
from translation.models import Language
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementBaseSerializer(serializers.ModelSerializer):
|
class AdvertisementBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Base serializer for model Advertisement."""
|
"""Base serializer for model Advertisement."""
|
||||||
|
page_type_detail = PageTypeBaseSerializer(read_only=True,
|
||||||
|
source='page_type')
|
||||||
target_languages = serializers.PrimaryKeyRelatedField(
|
target_languages = serializers.PrimaryKeyRelatedField(
|
||||||
queryset=Language.objects.all(),
|
queryset=Language.objects.all(),
|
||||||
many=True,
|
many=True,
|
||||||
|
|
@ -34,16 +34,17 @@ class AdvertisementBaseSerializer(serializers.ModelSerializer):
|
||||||
'target_sites',
|
'target_sites',
|
||||||
'start',
|
'start',
|
||||||
'end',
|
'end',
|
||||||
|
'page_type',
|
||||||
|
'page_type_detail',
|
||||||
]
|
]
|
||||||
|
extra_kwargs = {
|
||||||
|
'page_type': {'required': True, 'write_only': True}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageTypeCommonListSerializer(AdvertisementBaseSerializer):
|
class AdvertisementSerializer(AdvertisementBaseSerializer):
|
||||||
"""Serializer for AdvertisementPageTypeCommonView."""
|
"""Serializer for model Advertisement."""
|
||||||
|
|
||||||
page = PageBaseSerializer(source='common_page', read_only=True)
|
|
||||||
|
|
||||||
class Meta(AdvertisementBaseSerializer.Meta):
|
class Meta(AdvertisementBaseSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
fields = AdvertisementBaseSerializer.Meta.fields + [
|
fields = AdvertisementBaseSerializer.Meta.fields.copy()
|
||||||
'page',
|
fields.pop(fields.index('page_type_detail'))
|
||||||
]
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
"""Serializers for mobile app advertisements"""
|
"""Serializers for mobile app advertisements"""
|
||||||
from advertisement.serializers import AdvertisementBaseSerializer
|
from advertisement.serializers import AdvertisementSerializer
|
||||||
from main.serializers import PageBaseSerializer
|
from main.serializers import PageBaseSerializer
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageTypeMobileListSerializer(AdvertisementBaseSerializer):
|
class AdvertisementPageTypeMobileListSerializer(AdvertisementSerializer):
|
||||||
"""Serializer for AdvertisementPageTypeMobileView."""
|
"""Serializer for AdvertisementPageTypeMobileView."""
|
||||||
|
|
||||||
page = PageBaseSerializer(source='mobile_page', read_only=True)
|
pages = PageBaseSerializer(many=True, source='mobile_pages', read_only=True)
|
||||||
|
|
||||||
class Meta(AdvertisementBaseSerializer.Meta):
|
class Meta(AdvertisementSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
fields = AdvertisementBaseSerializer.Meta.fields + [
|
fields = AdvertisementSerializer.Meta.fields + [
|
||||||
'page',
|
'pages',
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
"""Serializers for web app advertisements"""
|
"""Serializers for web app advertisements"""
|
||||||
from advertisement.serializers import AdvertisementBaseSerializer
|
from advertisement.serializers import AdvertisementSerializer
|
||||||
from main.serializers import PageBaseSerializer
|
from main.serializers import PageBaseSerializer
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageTypeWebListSerializer(AdvertisementBaseSerializer):
|
class AdvertisementPageTypeWebListSerializer(AdvertisementSerializer):
|
||||||
"""Serializer for AdvertisementPageTypeWebView."""
|
"""Serializer for AdvertisementPageTypeWebView."""
|
||||||
|
|
||||||
page = PageBaseSerializer(source='web_page', read_only=True)
|
pages = PageBaseSerializer(many=True, source='web_pages', read_only=True)
|
||||||
|
|
||||||
class Meta(AdvertisementBaseSerializer.Meta):
|
class Meta(AdvertisementSerializer.Meta):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
fields = AdvertisementBaseSerializer.Meta.fields + [
|
fields = AdvertisementSerializer.Meta.fields + [
|
||||||
'page',
|
'pages',
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ app_name = 'advertisements'
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.AdvertisementListCreateView.as_view(), name='list-create'),
|
path('', views.AdvertisementListCreateView.as_view(), name='list-create'),
|
||||||
path('<int:pk>/', views.AdvertisementRUDView.as_view(), name='rud'),
|
path('<int:pk>/', views.AdvertisementRUDView.as_view(), name='rud'),
|
||||||
path('<int:pk>/pages/', views.AdvertisementPageListCreateView.as_view(),
|
path('<int:pk>/pages/', views.AdvertisementPageCreateView.as_view(),
|
||||||
name='page-list-create'),
|
name='ad-page-create'),
|
||||||
path('<int:ad_pk>/pages/<int:page_pk>/', views.AdvertisementPageRUDView.as_view(),
|
path('<int:ad_pk>/pages/<int:page_pk>/', views.AdvertisementPageUDView.as_view(),
|
||||||
name='page-rud')
|
name='ad-page-update-destroy')
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += common_urlpatterns
|
urlpatterns += common_urlpatterns
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,19 @@
|
||||||
"""Back office views for app advertisement"""
|
"""Back office views for app advertisement"""
|
||||||
from rest_framework import generics
|
from rest_framework import generics, status
|
||||||
|
from rest_framework.response import Response
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
|
from main.serializers import PageExtendedSerializer
|
||||||
from advertisement.models import Advertisement
|
from advertisement.models import Advertisement
|
||||||
from rest_framework.response import Response
|
|
||||||
from rest_framework import status
|
|
||||||
from advertisement.serializers import (AdvertisementBaseSerializer,
|
from advertisement.serializers import (AdvertisementBaseSerializer,
|
||||||
AdvertisementPageBaseSerializer,
|
AdvertisementDetailSerializer)
|
||||||
AdvertisementPageListCreateSerializer)
|
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementBackOfficeViewMixin(generics.GenericAPIView):
|
class AdvertisementBackOfficeViewMixin(generics.GenericAPIView):
|
||||||
"""Base back office advertisement view."""
|
"""Base back office advertisement view."""
|
||||||
|
|
||||||
|
pagination_class = None
|
||||||
permission_classes = (permissions.IsAuthenticated, )
|
permission_classes = (permissions.IsAuthenticated, )
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
|
|
@ -31,14 +31,14 @@ class AdvertisementRUDView(AdvertisementBackOfficeViewMixin,
|
||||||
generics.RetrieveUpdateDestroyAPIView):
|
generics.RetrieveUpdateDestroyAPIView):
|
||||||
"""Retrieve|Update|Destroy advertisement page view."""
|
"""Retrieve|Update|Destroy advertisement page view."""
|
||||||
|
|
||||||
serializer_class = AdvertisementBaseSerializer
|
serializer_class = AdvertisementDetailSerializer
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageListCreateView(AdvertisementBackOfficeViewMixin,
|
class AdvertisementPageCreateView(AdvertisementBackOfficeViewMixin,
|
||||||
generics.ListCreateAPIView):
|
generics.CreateAPIView):
|
||||||
"""Retrieve|Update|Destroy advertisement page view."""
|
"""Create advertisement page view."""
|
||||||
|
|
||||||
serializer_class = AdvertisementPageListCreateSerializer
|
serializer_class = PageExtendedSerializer
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
"""Returns the object the view is displaying."""
|
"""Returns the object the view is displaying."""
|
||||||
|
|
@ -56,12 +56,19 @@ class AdvertisementPageListCreateView(AdvertisementBackOfficeViewMixin,
|
||||||
"""Overridden get_queryset method."""
|
"""Overridden get_queryset method."""
|
||||||
return self.get_object().pages.all()
|
return self.get_object().pages.all()
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""Overridden create method."""
|
||||||
|
request.data.update({'advertisement': self.get_object().pk})
|
||||||
|
super().create(request, *args, **kwargs)
|
||||||
|
return Response(status=status.HTTP_200_OK)
|
||||||
|
|
||||||
class AdvertisementPageRUDView(AdvertisementBackOfficeViewMixin,
|
|
||||||
generics.RetrieveUpdateDestroyAPIView):
|
|
||||||
"""Create|Retrieve|Update|Destroy advertisement page view."""
|
|
||||||
|
|
||||||
serializer_class = AdvertisementPageBaseSerializer
|
class AdvertisementPageUDView(AdvertisementBackOfficeViewMixin,
|
||||||
|
generics.UpdateAPIView,
|
||||||
|
generics.DestroyAPIView):
|
||||||
|
"""Update|Destroy advertisement page view."""
|
||||||
|
|
||||||
|
serializer_class = PageExtendedSerializer
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
"""Returns the object the view is displaying."""
|
"""Returns the object the view is displaying."""
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,7 @@ from rest_framework import generics
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
|
|
||||||
from advertisement.models import Advertisement
|
from advertisement.models import Advertisement
|
||||||
from advertisement.serializers import AdvertisementBaseSerializer, \
|
from advertisement.serializers import AdvertisementBaseSerializer
|
||||||
AdvertisementPageTypeCommonListSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementBaseView(generics.GenericAPIView):
|
class AdvertisementBaseView(generics.GenericAPIView):
|
||||||
|
|
@ -16,8 +15,7 @@ class AdvertisementBaseView(generics.GenericAPIView):
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
"""Overridden get queryset method."""
|
"""Overridden get queryset method."""
|
||||||
return Advertisement.objects.with_base_related() \
|
return Advertisement.objects.with_base_related()
|
||||||
.by_locale(self.request.locale)
|
|
||||||
|
|
||||||
|
|
||||||
class AdvertisementPageTypeListView(AdvertisementBaseView, generics.ListAPIView):
|
class AdvertisementPageTypeListView(AdvertisementBaseView, generics.ListAPIView):
|
||||||
|
|
|
||||||
|
|
@ -51,3 +51,6 @@ class PageTypeAdmin(admin.ModelAdmin):
|
||||||
@admin.register(models.Page)
|
@admin.register(models.Page)
|
||||||
class PageAdmin(admin.ModelAdmin):
|
class PageAdmin(admin.ModelAdmin):
|
||||||
"""Page admin."""
|
"""Page admin."""
|
||||||
|
list_display = ('id', '__str__', 'advertisement')
|
||||||
|
list_filter = ('advertisement__url', 'source')
|
||||||
|
date_hierarchy = 'created'
|
||||||
|
|
|
||||||
18
apps/main/migrations/0041_auto_20191211_0631.py
Normal file
18
apps/main/migrations/0041_auto_20191211_0631.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.2.7 on 2019-12-11 06:31
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('advertisement', '0008_auto_20191116_1135'),
|
||||||
|
('main', '0040_footer'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name='page',
|
||||||
|
unique_together={('advertisement', 'source')},
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -305,7 +305,7 @@ class PageQuerySet(models.QuerySet):
|
||||||
|
|
||||||
def by_platform(self, platform: int):
|
def by_platform(self, platform: int):
|
||||||
"""Filter by platform."""
|
"""Filter by platform."""
|
||||||
return self.filter(source=platform)
|
return self.filter(source__in=[Page.ALL, platform])
|
||||||
|
|
||||||
|
|
||||||
class Page(URLImageMixin, PlatformMixin, ProjectBaseMixin):
|
class Page(URLImageMixin, PlatformMixin, ProjectBaseMixin):
|
||||||
|
|
@ -325,6 +325,7 @@ class Page(URLImageMixin, PlatformMixin, ProjectBaseMixin):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
verbose_name = _('page')
|
verbose_name = _('page')
|
||||||
verbose_name_plural = _('pages')
|
verbose_name_plural = _('pages')
|
||||||
|
unique_together = ('advertisement', 'source')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""Overridden dunder method."""
|
"""Overridden dunder method."""
|
||||||
|
|
|
||||||
|
|
@ -152,8 +152,6 @@ class SiteShortSerializer(serializers.ModelSerializer):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AwardBaseSerializer(serializers.ModelSerializer):
|
class AwardBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Award base serializer."""
|
"""Award base serializer."""
|
||||||
|
|
||||||
|
|
@ -234,10 +232,26 @@ class PageBaseSerializer(serializers.ModelSerializer):
|
||||||
'advertisement',
|
'advertisement',
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'establishment': {'write_only': True}
|
'advertisement': {'write_only': True},
|
||||||
|
'image_url': {'required': True},
|
||||||
|
'width': {'required': True},
|
||||||
|
'height': {'required': True},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PageExtendedSerializer(PageBaseSerializer):
|
||||||
|
"""Extended serializer for model Page."""
|
||||||
|
source_display = serializers.CharField(read_only=True,
|
||||||
|
source='get_source_display')
|
||||||
|
|
||||||
|
class Meta(PageBaseSerializer.Meta):
|
||||||
|
"""Meta class."""
|
||||||
|
fields = PageBaseSerializer.Meta.fields + [
|
||||||
|
'source',
|
||||||
|
'source_display',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class PageTypeBaseSerializer(serializers.ModelSerializer):
|
class PageTypeBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer fro model PageType."""
|
"""Serializer fro model PageType."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@ urlpatterns = [
|
||||||
name='site-feature-rud'),
|
name='site-feature-rud'),
|
||||||
path('footer/', views.FooterBackView.as_view(), name='footer-list-create'),
|
path('footer/', views.FooterBackView.as_view(), name='footer-list-create'),
|
||||||
path('footer/<int:pk>/', views.FooterRUDBackView.as_view(), name='footer-rud'),
|
path('footer/<int:pk>/', views.FooterRUDBackView.as_view(), name='footer-rud'),
|
||||||
|
path('page-types/', views.PageTypeListCreateView.as_view(),
|
||||||
|
name='page-types-list-create')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ from rest_framework import generics, permissions
|
||||||
|
|
||||||
from main import serializers
|
from main import serializers
|
||||||
from main.filters import AwardFilter
|
from main.filters import AwardFilter
|
||||||
from main.models import Award, Footer
|
from main.models import Award, Footer, PageType
|
||||||
from main.views import SiteSettingsView, SiteListView
|
from main.views import SiteSettingsView, SiteListView
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -81,3 +81,11 @@ class FooterRUDBackView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
|
||||||
serializer_class = serializers.FooterBackSerializer
|
serializer_class = serializers.FooterBackSerializer
|
||||||
queryset = Footer.objects.all()
|
queryset = Footer.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
class PageTypeListCreateView(generics.ListCreateAPIView):
|
||||||
|
"""PageType back office view."""
|
||||||
|
permission_classes = (permissions.IsAuthenticatedOrReadOnly, )
|
||||||
|
pagination_class = None
|
||||||
|
serializer_class = serializers.PageTypeBaseSerializer
|
||||||
|
queryset = PageType.objects.all()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user