Added content page method

This commit is contained in:
dormantman 2020-01-22 16:03:23 +03:00
parent b12253fb6b
commit 6a1fea76b6
6 changed files with 107 additions and 6 deletions

View File

@ -0,0 +1,27 @@
# Generated by Django 2.2.7 on 2020-01-22 12:41
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('main', '0049_remove_navigationbarpermission_section'),
]
operations = [
migrations.CreateModel(
name='ContentPage',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('content', models.TextField(verbose_name='content')),
('slug', models.SlugField(max_length=255, null=True, unique=True, verbose_name='slug')),
],
options={
'abstract': False,
},
),
]

View File

@ -0,0 +1,27 @@
# Generated by Django 2.2.7 on 2020-01-22 12:56
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('main', '0050_contentpage'),
]
operations = [
migrations.AlterModelOptions(
name='contentpage',
options={'verbose_name': 'content page', 'verbose_name_plural': 'content page'},
),
migrations.AddField(
model_name='contentpage',
name='name',
field=models.CharField(default='', max_length=255, verbose_name='name'),
),
migrations.AlterField(
model_name='contentpage',
name='content',
field=models.TextField(default='', verbose_name='content'),
),
]

View File

@ -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)
@ -402,6 +404,24 @@ class Footer(ProjectBaseMixin):
links = models.ManyToManyField(FooterLink, verbose_name=_('links'), related_name='link_footer') links = models.ManyToManyField(FooterLink, verbose_name=_('links'), related_name='link_footer')
class ContentPageQuerySet(models.QuerySet):
"""QuerySet for model ContentPage."""
class ContentPage(ProjectBaseMixin):
name = models.CharField(_('name'), max_length=255, default='')
content = models.TextField(_('content'), default='')
slug = models.SlugField(max_length=255, unique=True, null=True,
verbose_name=_('slug'))
objects = ContentPageQuerySet.as_manager()
class Meta:
"""Meta class."""
verbose_name = _('content page')
verbose_name_plural = _('content page')
class PanelQuerySet(models.QuerySet): class PanelQuerySet(models.QuerySet):
"""Panels QuerySet.""" """Panels QuerySet."""
@ -458,7 +478,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 +488,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:

View File

@ -345,3 +345,21 @@ class NavigationBarPermissionBaseSerializer(serializers.ModelSerializer):
'sections', 'sections',
'permission_mode_display', 'permission_mode_display',
] ]
class ContentPageSerializer(serializers.ModelSerializer):
"""Content page serializer"""
name = serializers.CharField()
content = serializers.CharField()
slug = serializers.CharField()
class Meta:
"""Meta class."""
model = models.ContentPage
fields = [
'id',
'name',
'content',
'slug'
]

View File

@ -9,4 +9,5 @@ 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/', ContentPage.as_view(), name='content-pages')
] ]

View File

@ -95,3 +95,11 @@ class DetermineLocation(generics.GenericAPIView):
'country_code': country_code, 'country_code': country_code,
}) })
raise Http404 raise Http404
class ContentPage(generics.ListCreateAPIView):
"""Method to get content pages"""
permission_classes = (permissions.AllowAny,)
serializer_class = serializers.ContentPageSerializer
queryset = models.ContentPage.objects.all()