Add endpoints to gallery
This commit is contained in:
parent
03fc4a6c56
commit
086b26e6d9
|
|
@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from location import models
|
from location import models
|
||||||
from utils.serializers import TranslatedField
|
from utils.serializers import TranslatedField
|
||||||
from apps.gallery.models import Image
|
from gallery.models import Image
|
||||||
|
|
||||||
|
|
||||||
class CountrySerializer(serializers.ModelSerializer):
|
class CountrySerializer(serializers.ModelSerializer):
|
||||||
|
|
@ -160,6 +160,44 @@ class CityImageSerializer(serializers.ModelSerializer):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class CityGallerySerializer(serializers.ModelSerializer):
|
||||||
|
"""Serializer class for model NewsGallery."""
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class"""
|
||||||
|
|
||||||
|
model = models.CityGallery
|
||||||
|
fields = [
|
||||||
|
'id',
|
||||||
|
'is_main',
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_request_kwargs(self):
|
||||||
|
"""Get url kwargs from request."""
|
||||||
|
return self.context.get('request').parser_context.get('kwargs')
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
"""Override validate method."""
|
||||||
|
news_pk = self.get_request_kwargs().get('pk')
|
||||||
|
image_id = self.get_request_kwargs().get('image_id')
|
||||||
|
|
||||||
|
news_qs = models.City.objects.filter(pk=news_pk)
|
||||||
|
image_qs = Image.objects.filter(id=image_id)
|
||||||
|
|
||||||
|
if not news_qs.exists():
|
||||||
|
raise serializers.ValidationError({'detail': _('News not found')})
|
||||||
|
if not image_qs.exists():
|
||||||
|
raise serializers.ValidationError({'detail': _('Image not found')})
|
||||||
|
|
||||||
|
news = news_qs.first()
|
||||||
|
image = image_qs.first()
|
||||||
|
|
||||||
|
attrs['news'] = news
|
||||||
|
attrs['image'] = image
|
||||||
|
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
class AddressBaseSerializer(serializers.ModelSerializer):
|
class AddressBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for address obj in related objects."""
|
"""Serializer for address obj in related objects."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ urlpatterns = [
|
||||||
|
|
||||||
path('cities/<int:pk>/gallery/', views.CityGalleryListView.as_view(),
|
path('cities/<int:pk>/gallery/', views.CityGalleryListView.as_view(),
|
||||||
name='gallery-list'),
|
name='gallery-list'),
|
||||||
path('cities/<int:pk>/gallery/<int:image_id>/', views.NewsBackOfficeGalleryCreateDestroyView.as_view(),
|
path('cities/<int:pk>/gallery/<int:image_id>/', views.CityGalleryCreateDestroyView.as_view(),
|
||||||
name='gallery-create-destroy'),
|
name='gallery-create-destroy'),
|
||||||
|
|
||||||
path('countries/', views.CountryListView.as_view(), name='country-list'),
|
path('countries/', views.CountryListView.as_view(), name='country-list'),
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
"""Location app views."""
|
"""Location app views."""
|
||||||
from rest_framework import generics
|
from django.conf import settings
|
||||||
from rest_framework import permissions
|
from django.db.transaction import on_commit
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from rest_framework import generics, permissions, status
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from gallery.tasks import delete_image
|
||||||
|
|
||||||
from location import models, serializers
|
from location import models, serializers
|
||||||
|
|
||||||
|
|
@ -109,8 +112,7 @@ class CityGalleryListView(generics.ListAPIView):
|
||||||
serializer_class = serializers.CityImageSerializer
|
serializer_class = serializers.CityImageSerializer
|
||||||
|
|
||||||
permission_classes = (permissions.IsAuthenticated,)
|
permission_classes = (permissions.IsAuthenticated,)
|
||||||
queryset = models.City.objects.with_base_related() \
|
queryset = models.City.objects
|
||||||
.order_by('-is_highlighted', '-created')
|
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
"""Override get_object method."""
|
"""Override get_object method."""
|
||||||
|
|
@ -127,6 +129,48 @@ class CityGalleryListView(generics.ListAPIView):
|
||||||
return self.get_object().gallery.all()
|
return self.get_object().gallery.all()
|
||||||
|
|
||||||
|
|
||||||
|
class CityGalleryCreateDestroyView(generics.CreateAPIView,
|
||||||
|
generics.DestroyAPIView):
|
||||||
|
|
||||||
|
permission_classes = (permissions.IsAuthenticated,)
|
||||||
|
queryset = models.City.objects
|
||||||
|
|
||||||
|
"""Resource for a create gallery for news for back-office users."""
|
||||||
|
serializer_class = serializers.CityGallerySerializer
|
||||||
|
|
||||||
|
def get_object(self):
|
||||||
|
"""
|
||||||
|
Returns the object the view is displaying.
|
||||||
|
"""
|
||||||
|
city_qs = self.filter_queryset(self.get_queryset())
|
||||||
|
|
||||||
|
city = get_object_or_404(city_qs, pk=self.kwargs['pk'])
|
||||||
|
gallery = get_object_or_404(city.news_gallery, image_id=self.kwargs['image_id'])
|
||||||
|
|
||||||
|
# May raise a permission denied
|
||||||
|
self.check_object_permissions(self.request, gallery)
|
||||||
|
|
||||||
|
return gallery
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
"""Overridden create method"""
|
||||||
|
super().create(request, *args, **kwargs)
|
||||||
|
return Response(status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
def destroy(self, request, *args, **kwargs):
|
||||||
|
"""Override destroy method."""
|
||||||
|
gallery_obj = self.get_object()
|
||||||
|
if settings.USE_CELERY:
|
||||||
|
on_commit(lambda: delete_image.delay(image_id=gallery_obj.image.id,
|
||||||
|
completely=False))
|
||||||
|
else:
|
||||||
|
on_commit(lambda: delete_image(image_id=gallery_obj.image.id,
|
||||||
|
completely=False))
|
||||||
|
# Delete an instances of NewsGallery model
|
||||||
|
gallery_obj.delete()
|
||||||
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
|
|
||||||
# Address
|
# Address
|
||||||
class AddressCreateView(AddressViewMixin, generics.CreateAPIView):
|
class AddressCreateView(AddressViewMixin, generics.CreateAPIView):
|
||||||
"""Create view for model Address"""
|
"""Create view for model Address"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user