Add city gallery list view
This commit is contained in:
parent
22ac3d3046
commit
03fc4a6c56
|
|
@ -4,6 +4,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||
from rest_framework import serializers
|
||||
from location import models
|
||||
from utils.serializers import TranslatedField
|
||||
from apps.gallery.models import Image
|
||||
|
||||
|
||||
class CountrySerializer(serializers.ModelSerializer):
|
||||
|
|
@ -87,6 +88,78 @@ class CitySerializer(serializers.ModelSerializer):
|
|||
]
|
||||
|
||||
|
||||
class CropImageSerializer(serializers.Serializer):
|
||||
"""Serializer for crop images for City object."""
|
||||
|
||||
preview_url = serializers.SerializerMethodField()
|
||||
promo_horizontal_web_url = serializers.SerializerMethodField()
|
||||
promo_horizontal_mobile_url = serializers.SerializerMethodField()
|
||||
tile_horizontal_web_url = serializers.SerializerMethodField()
|
||||
tile_horizontal_mobile_url = serializers.SerializerMethodField()
|
||||
tile_vertical_web_url = serializers.SerializerMethodField()
|
||||
highlight_vertical_web_url = serializers.SerializerMethodField()
|
||||
editor_web_url = serializers.SerializerMethodField()
|
||||
editor_mobile_url = serializers.SerializerMethodField()
|
||||
|
||||
def get_preview_url(self, obj):
|
||||
"""Get crop preview."""
|
||||
return obj.instance.get_image_url('news_preview')
|
||||
|
||||
def get_promo_horizontal_web_url(self, obj):
|
||||
"""Get crop promo_horizontal_web."""
|
||||
return obj.instance.get_image_url('news_promo_horizontal_web')
|
||||
|
||||
def get_promo_horizontal_mobile_url(self, obj):
|
||||
"""Get crop promo_horizontal_mobile."""
|
||||
return obj.instance.get_image_url('news_promo_horizontal_mobile')
|
||||
|
||||
def get_tile_horizontal_web_url(self, obj):
|
||||
"""Get crop tile_horizontal_web."""
|
||||
return obj.instance.get_image_url('news_tile_horizontal_web')
|
||||
|
||||
def get_tile_horizontal_mobile_url(self, obj):
|
||||
"""Get crop tile_horizontal_mobile."""
|
||||
return obj.instance.get_image_url('news_tile_horizontal_mobile')
|
||||
|
||||
def get_tile_vertical_web_url(self, obj):
|
||||
"""Get crop tile_vertical_web."""
|
||||
return obj.instance.get_image_url('news_tile_vertical_web')
|
||||
|
||||
def get_highlight_vertical_web_url(self, obj):
|
||||
"""Get crop highlight_vertical_web."""
|
||||
return obj.instance.get_image_url('news_highlight_vertical_web')
|
||||
|
||||
def get_editor_web_url(self, obj):
|
||||
"""Get crop editor_web."""
|
||||
return obj.instance.get_image_url('news_editor_web')
|
||||
|
||||
def get_editor_mobile_url(self, obj):
|
||||
"""Get crop editor_mobile."""
|
||||
return obj.instance.get_image_url('news_editor_mobile')
|
||||
|
||||
|
||||
class CityImageSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for returning crop images of news image."""
|
||||
|
||||
orientation_display = serializers.CharField(source='get_orientation_display',
|
||||
read_only=True)
|
||||
original_url = serializers.URLField(source='image.url')
|
||||
auto_crop_images = CropImageSerializer(source='image', allow_null=True)
|
||||
|
||||
class Meta:
|
||||
model = Image
|
||||
fields = [
|
||||
'id',
|
||||
'title',
|
||||
'orientation_display',
|
||||
'original_url',
|
||||
'auto_crop_images',
|
||||
]
|
||||
extra_kwargs = {
|
||||
'orientation': {'write_only': True}
|
||||
}
|
||||
|
||||
|
||||
class AddressBaseSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for address obj in related objects."""
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,11 @@ urlpatterns = [
|
|||
path('cities/', views.CityListCreateView.as_view(), name='city-list'),
|
||||
path('cities/<int:pk>/', views.CityRUDView.as_view(), name='city-detail'),
|
||||
|
||||
path('cities/<int:pk>/gallery/', views.CityGalleryListView.as_view(),
|
||||
name='gallery-list'),
|
||||
path('cities/<int:pk>/gallery/<int:image_id>/', views.NewsBackOfficeGalleryCreateDestroyView.as_view(),
|
||||
name='gallery-create-destroy'),
|
||||
|
||||
path('countries/', views.CountryListView.as_view(), name='country-list'),
|
||||
path('countries/<int:pk>/', views.CountryRetrieveView.as_view(), name='country-retrieve'),
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
"""Location app views."""
|
||||
from rest_framework import generics
|
||||
from rest_framework import permissions
|
||||
from django.shortcuts import get_object_or_404
|
||||
|
||||
from location import models, serializers
|
||||
|
||||
|
|
@ -103,6 +104,29 @@ class CityUpdateView(CityViewMixin, generics.UpdateAPIView):
|
|||
serializer_class = serializers.CitySerializer
|
||||
|
||||
|
||||
class CityGalleryListView(generics.ListAPIView):
|
||||
"""Resource for returning gallery for news for back-office users."""
|
||||
serializer_class = serializers.CityImageSerializer
|
||||
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
queryset = models.City.objects.with_base_related() \
|
||||
.order_by('-is_highlighted', '-created')
|
||||
|
||||
def get_object(self):
|
||||
"""Override get_object method."""
|
||||
qs = super(CityGalleryListView, self).get_queryset()
|
||||
city = get_object_or_404(qs, pk=self.kwargs['pk'])
|
||||
|
||||
# May raise a permission denied
|
||||
self.check_object_permissions(self.request, city)
|
||||
|
||||
return city
|
||||
|
||||
def get_queryset(self):
|
||||
"""Override get_queryset method."""
|
||||
return self.get_object().gallery.all()
|
||||
|
||||
|
||||
# Address
|
||||
class AddressCreateView(AddressViewMixin, generics.CreateAPIView):
|
||||
"""Create view for model Address"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user