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 utils.exceptions import UnprocessableEntityError
|
||||
from utils.methods import dictfetchall
|
||||
from utils.models import (ProjectBaseMixin, TJSONField, URLImageMixin,
|
||||
TranslatedFieldsMixin, PlatformMixin)
|
||||
from utils.models import (
|
||||
ProjectBaseMixin, TJSONField, URLImageMixin,
|
||||
TranslatedFieldsMixin, PlatformMixin,
|
||||
)
|
||||
|
||||
|
||||
class Currency(TranslatedFieldsMixin, models.Model):
|
||||
|
|
@ -156,10 +158,10 @@ class SiteFeature(ProjectBaseMixin):
|
|||
published = models.BooleanField(default=False, verbose_name=_('Published'))
|
||||
main = models.BooleanField(default=False,
|
||||
help_text='shows on main page',
|
||||
verbose_name=_('Main'),)
|
||||
verbose_name=_('Main'), )
|
||||
backoffice = models.BooleanField(default=False,
|
||||
help_text='shows on backoffice page',
|
||||
verbose_name=_('backoffice'),)
|
||||
verbose_name=_('backoffice'), )
|
||||
nested = models.ManyToManyField('self', blank=True, symmetrical=False)
|
||||
old_id = models.IntegerField(null=True, blank=True)
|
||||
|
||||
|
|
@ -458,7 +460,7 @@ class Panel(ProjectBaseMixin):
|
|||
}
|
||||
with connections['default'].cursor() as cursor:
|
||||
count = self._raw_count(raw)
|
||||
start = page*page_size
|
||||
start = page * page_size
|
||||
cursor.execute(*self.set_limits(start, page_size))
|
||||
data["count"] = count
|
||||
data["next"] = self.get_next_page(count, page, page_size)
|
||||
|
|
@ -468,7 +470,7 @@ class Panel(ProjectBaseMixin):
|
|||
return data
|
||||
|
||||
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:
|
||||
raise exceptions.NotFound('Invalid page.')
|
||||
if max_page > page:
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from rest_framework import serializers
|
|||
from location.serializers import CountrySerializer
|
||||
from main import models
|
||||
from tag.serializers import TagBackOfficeSerializer
|
||||
from utils.serializers import ProjectModelSerializer, TranslatedField, RecursiveFieldSerializer
|
||||
from utils.serializers import ProjectModelSerializer, RecursiveFieldSerializer, TranslatedField
|
||||
|
||||
|
||||
class FeatureSerializer(serializers.ModelSerializer):
|
||||
|
|
|
|||
|
|
@ -9,4 +9,10 @@ common_urlpatterns = [
|
|||
path('awards/<int:pk>/', AwardRetrieveView.as_view(), name='awards_retrieve'),
|
||||
path('carousel/', CarouselListView.as_view(), name='carousel-list'),
|
||||
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."""
|
||||
from django.http import Http404
|
||||
from django.conf import settings
|
||||
from rest_framework import generics, permissions
|
||||
from rest_framework.renderers import StaticHTMLRenderer
|
||||
from rest_framework.response import Response
|
||||
|
||||
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:
|
||||
|
|
@ -42,7 +47,6 @@ from main import methods, models, serializers
|
|||
# class SiteFeaturesRUDView(SiteFeaturesViewMixin,
|
||||
# generics.RetrieveUpdateDestroyAPIView):
|
||||
# """Site features RUD."""
|
||||
from utils.serializers import EmptySerializer
|
||||
|
||||
|
||||
class AwardView(generics.ListAPIView):
|
||||
|
|
@ -95,3 +99,72 @@ class DetermineLocation(generics.GenericAPIView):
|
|||
'country_code': country_code,
|
||||
})
|
||||
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