Merge branch 'feature/content-pages' into 'develop'
Feature/content pages See merge request gm/gm-backend!232
This commit is contained in:
commit
976e35cbd9
|
|
@ -20,8 +20,10 @@ from review.models import Review
|
||||||
from tag.models import Tag
|
from tag.models import Tag
|
||||||
from utils.exceptions import UnprocessableEntityError
|
from utils.exceptions import UnprocessableEntityError
|
||||||
from utils.methods import dictfetchall
|
from utils.methods import dictfetchall
|
||||||
from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin,
|
from utils.models import (
|
||||||
TranslatedFieldsMixin, PlatformMixin)
|
ProjectBaseMixin, TJSONField, URLImageMixin,
|
||||||
|
TranslatedFieldsMixin, PlatformMixin,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Currency(TranslatedFieldsMixin, models.Model):
|
class Currency(TranslatedFieldsMixin, models.Model):
|
||||||
|
|
@ -156,10 +158,10 @@ class SiteFeature(ProjectBaseMixin):
|
||||||
published = models.BooleanField(default=False, verbose_name=_('Published'))
|
published = models.BooleanField(default=False, verbose_name=_('Published'))
|
||||||
main = models.BooleanField(default=False,
|
main = models.BooleanField(default=False,
|
||||||
help_text='shows on main page',
|
help_text='shows on main page',
|
||||||
verbose_name=_('Main'),)
|
verbose_name=_('Main'), )
|
||||||
backoffice = models.BooleanField(default=False,
|
backoffice = models.BooleanField(default=False,
|
||||||
help_text='shows on backoffice page',
|
help_text='shows on backoffice page',
|
||||||
verbose_name=_('backoffice'),)
|
verbose_name=_('backoffice'), )
|
||||||
nested = models.ManyToManyField('self', blank=True, symmetrical=False)
|
nested = models.ManyToManyField('self', blank=True, symmetrical=False)
|
||||||
old_id = models.IntegerField(null=True, blank=True)
|
old_id = models.IntegerField(null=True, blank=True)
|
||||||
|
|
||||||
|
|
@ -458,7 +460,7 @@ class Panel(ProjectBaseMixin):
|
||||||
}
|
}
|
||||||
with connections['default'].cursor() as cursor:
|
with connections['default'].cursor() as cursor:
|
||||||
count = self._raw_count(raw)
|
count = self._raw_count(raw)
|
||||||
start = page*page_size
|
start = page * page_size
|
||||||
cursor.execute(*self.set_limits(start, page_size))
|
cursor.execute(*self.set_limits(start, page_size))
|
||||||
data["count"] = count
|
data["count"] = count
|
||||||
data["next"] = self.get_next_page(count, page, page_size)
|
data["next"] = self.get_next_page(count, page, page_size)
|
||||||
|
|
@ -468,7 +470,7 @@ class Panel(ProjectBaseMixin):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def get_next_page(self, count, page, page_size):
|
def get_next_page(self, count, page, page_size):
|
||||||
max_page = count/page_size-1
|
max_page = count / page_size - 1
|
||||||
if not 0 <= page <= max_page:
|
if not 0 <= page <= max_page:
|
||||||
raise exceptions.NotFound('Invalid page.')
|
raise exceptions.NotFound('Invalid page.')
|
||||||
if max_page > page:
|
if max_page > page:
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from rest_framework import serializers
|
||||||
from location.serializers import CountrySerializer
|
from location.serializers import CountrySerializer
|
||||||
from main import models
|
from main import models
|
||||||
from tag.serializers import TagBackOfficeSerializer
|
from tag.serializers import TagBackOfficeSerializer
|
||||||
from utils.serializers import ProjectModelSerializer, TranslatedField, RecursiveFieldSerializer
|
from utils.serializers import ProjectModelSerializer, RecursiveFieldSerializer, TranslatedField
|
||||||
|
|
||||||
|
|
||||||
class FeatureSerializer(serializers.ModelSerializer):
|
class FeatureSerializer(serializers.ModelSerializer):
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,10 @@ common_urlpatterns = [
|
||||||
path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'),
|
path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'),
|
||||||
path('carousel/', CarouselListView.as_view(), name='carousel-list'),
|
path('carousel/', CarouselListView.as_view(), name='carousel-list'),
|
||||||
path('determine-location/', DetermineLocation.as_view(), name='determine-location'),
|
path('determine-location/', DetermineLocation.as_view(), name='determine-location'),
|
||||||
|
path('content-pages/', ContentPageView.as_view(), name='content-pages-list'),
|
||||||
|
path('content-pages/<int:pk>/', ContentPageIdRetrieveView.as_view(), name='content-pages-retrieve-id'),
|
||||||
|
path('content-pages/create/', ContentPageAdminView.as_view(), name='content-pages-admin-list'),
|
||||||
|
path('content-pages/slug/<slug:slug>/', ContentPageRetrieveView.as_view(), name='content-pages-retrieve-slug'),
|
||||||
|
path('content-pages/update/slug/<slug:slug>/', ContentPageRetrieveAdminView.as_view(),
|
||||||
|
name='content-pages-admin-retrieve')
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
"""Main app views."""
|
"""Main app views."""
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.conf import settings
|
|
||||||
from rest_framework import generics, permissions
|
from rest_framework import generics, permissions
|
||||||
|
from rest_framework.renderers import StaticHTMLRenderer
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
from main import methods, models, serializers
|
from main import methods, models, serializers
|
||||||
|
from news.models import News, NewsType
|
||||||
|
from news.serializers import NewsDetailSerializer, NewsListSerializer
|
||||||
|
from news.views import NewsMixinView
|
||||||
|
from utils.serializers import EmptySerializer
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# class FeatureViewMixin:
|
# class FeatureViewMixin:
|
||||||
|
|
@ -42,7 +47,6 @@ from main import methods, models, serializers
|
||||||
# class SiteFeaturesRUDView(SiteFeaturesViewMixin,
|
# class SiteFeaturesRUDView(SiteFeaturesViewMixin,
|
||||||
# generics.RetrieveUpdateDestroyAPIView):
|
# generics.RetrieveUpdateDestroyAPIView):
|
||||||
# """Site features RUD."""
|
# """Site features RUD."""
|
||||||
from utils.serializers import EmptySerializer
|
|
||||||
|
|
||||||
|
|
||||||
class AwardView(generics.ListAPIView):
|
class AwardView(generics.ListAPIView):
|
||||||
|
|
@ -95,3 +99,72 @@ class DetermineLocation(generics.GenericAPIView):
|
||||||
'country_code': country_code,
|
'country_code': country_code,
|
||||||
})
|
})
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageBaseView(generics.GenericAPIView):
|
||||||
|
|
||||||
|
@property
|
||||||
|
def static_page_category(self):
|
||||||
|
name = 'static'
|
||||||
|
|
||||||
|
static_page_category = NewsType.objects.filter(name=name).first()
|
||||||
|
|
||||||
|
if static_page_category is None:
|
||||||
|
static_page_category = NewsType.objects.create(name=name)
|
||||||
|
|
||||||
|
return static_page_category
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return super().get_queryset().filter(news_type=self.static_page_category)
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageView(ContentPageBaseView, generics.ListAPIView):
|
||||||
|
"""Method to get content pages"""
|
||||||
|
|
||||||
|
permission_classes = (permissions.AllowAny,)
|
||||||
|
serializer_class = NewsListSerializer
|
||||||
|
queryset = News.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageAdminView(generics.ListCreateAPIView):
|
||||||
|
"""Method to get content pages"""
|
||||||
|
|
||||||
|
permission_classes = (permissions.IsAdminUser,)
|
||||||
|
serializer_class = NewsListSerializer
|
||||||
|
queryset = News.objects.all()
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageRetrieveView(NewsMixinView, generics.RetrieveAPIView):
|
||||||
|
"""Retrieve method to get content pages"""
|
||||||
|
|
||||||
|
lookup_field = None
|
||||||
|
permission_classes = (permissions.AllowAny,)
|
||||||
|
serializer_class = NewsDetailSerializer
|
||||||
|
queryset = News.objects.all()
|
||||||
|
renderer_classes = [StaticHTMLRenderer]
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
instance = self.get_object()
|
||||||
|
return Response(instance.description.get(request.locale))
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageIdRetrieveView(generics.RetrieveAPIView):
|
||||||
|
"""Retrieve method to get content pages"""
|
||||||
|
|
||||||
|
permission_classes = (permissions.AllowAny,)
|
||||||
|
serializer_class = NewsDetailSerializer
|
||||||
|
queryset = News.objects.all()
|
||||||
|
renderer_classes = [StaticHTMLRenderer]
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
instance = self.get_object()
|
||||||
|
return Response(instance.description.get(request.locale))
|
||||||
|
|
||||||
|
|
||||||
|
class ContentPageRetrieveAdminView(NewsMixinView, generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
"""Retrieve method to get content pages"""
|
||||||
|
|
||||||
|
lookup_field = None
|
||||||
|
permission_classes = (permissions.IsAdminUser,)
|
||||||
|
serializer_class = NewsDetailSerializer
|
||||||
|
queryset = News.objects.all()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user