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 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
|
||||||
|
|
||||||
|
|
||||||
class CountrySerializer(serializers.ModelSerializer):
|
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):
|
class AddressBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for address obj in related objects."""
|
"""Serializer for address obj in related objects."""
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,11 @@ urlpatterns = [
|
||||||
path('cities/', views.CityListCreateView.as_view(), name='city-list'),
|
path('cities/', views.CityListCreateView.as_view(), name='city-list'),
|
||||||
path('cities/<int:pk>/', views.CityRUDView.as_view(), name='city-detail'),
|
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/', views.CountryListView.as_view(), name='country-list'),
|
||||||
path('countries/<int:pk>/', views.CountryRetrieveView.as_view(), name='country-retrieve'),
|
path('countries/<int:pk>/', views.CountryRetrieveView.as_view(), name='country-retrieve'),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
"""Location app views."""
|
"""Location app views."""
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
from rest_framework import permissions
|
from rest_framework import permissions
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from location import models, serializers
|
from location import models, serializers
|
||||||
|
|
||||||
|
|
@ -103,6 +104,29 @@ class CityUpdateView(CityViewMixin, generics.UpdateAPIView):
|
||||||
serializer_class = serializers.CitySerializer
|
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
|
# 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