remove city gallery
This commit is contained in:
parent
42885e8b4c
commit
8f206f2a9c
20
apps/location/migrations/0035_auto_20200115_1117.py
Normal file
20
apps/location/migrations/0035_auto_20200115_1117.py
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 2.2.7 on 2020-01-15 11:17
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('location', '0034_city_image'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='city',
|
||||||
|
name='gallery',
|
||||||
|
),
|
||||||
|
migrations.DeleteModel(
|
||||||
|
name='CityGallery',
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -143,7 +143,7 @@ class CityQuerySet(models.QuerySet):
|
||||||
return self.filter(country__code=code)
|
return self.filter(country__code=code)
|
||||||
|
|
||||||
|
|
||||||
class City(GalleryMixin, models.Model):
|
class City(models.Model):
|
||||||
"""Region model."""
|
"""Region model."""
|
||||||
name = models.CharField(_('name'), max_length=250)
|
name = models.CharField(_('name'), max_length=250)
|
||||||
name_translated = TJSONField(blank=True, null=True, default=None,
|
name_translated = TJSONField(blank=True, null=True, default=None,
|
||||||
|
|
@ -166,10 +166,6 @@ class City(GalleryMixin, models.Model):
|
||||||
map2 = models.CharField(max_length=255, blank=True, null=True)
|
map2 = models.CharField(max_length=255, blank=True, null=True)
|
||||||
map_ref = models.CharField(max_length=255, blank=True, null=True)
|
map_ref = models.CharField(max_length=255, blank=True, null=True)
|
||||||
situation = models.CharField(max_length=255, blank=True, null=True)
|
situation = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
||||||
# deprecated
|
|
||||||
# todo: remove gallery after move to image
|
|
||||||
gallery = models.ManyToManyField('gallery.Image', through='location.CityGallery', blank=True)
|
|
||||||
image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
|
image = models.ForeignKey('gallery.Image', on_delete=models.SET_NULL,
|
||||||
blank=True, null=True, default=None,
|
blank=True, null=True, default=None,
|
||||||
related_name='city_image',
|
related_name='city_image',
|
||||||
|
|
@ -211,24 +207,6 @@ class City(GalleryMixin, models.Model):
|
||||||
return image_property
|
return image_property
|
||||||
|
|
||||||
|
|
||||||
class CityGallery(IntermediateGalleryModelMixin):
|
|
||||||
"""Gallery for model City."""
|
|
||||||
city = models.ForeignKey(City, null=True,
|
|
||||||
related_name='city_gallery',
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
verbose_name=_('city'))
|
|
||||||
image = models.ForeignKey('gallery.Image', null=True,
|
|
||||||
related_name='city_gallery',
|
|
||||||
on_delete=models.CASCADE,
|
|
||||||
verbose_name=_('image'))
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
"""CityGallery meta class."""
|
|
||||||
verbose_name = _('city gallery')
|
|
||||||
verbose_name_plural = _('city galleries')
|
|
||||||
unique_together = (('city', 'is_main'), ('city', 'image'))
|
|
||||||
|
|
||||||
|
|
||||||
class Address(models.Model):
|
class Address(models.Model):
|
||||||
"""Address model."""
|
"""Address model."""
|
||||||
city = models.ForeignKey(City, verbose_name=_('city'), on_delete=models.CASCADE)
|
city = models.ForeignKey(City, verbose_name=_('city'), on_delete=models.CASCADE)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
from location import models
|
from location import models
|
||||||
from location.serializers import common
|
from location.serializers import common
|
||||||
from rest_framework import serializers
|
|
||||||
from gallery.models import Image
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
|
|
||||||
|
|
||||||
class AddressCreateSerializer(common.AddressDetailSerializer):
|
class AddressCreateSerializer(common.AddressDetailSerializer):
|
||||||
|
|
@ -21,46 +18,3 @@ class CountryBackSerializer(common.CountrySerializer):
|
||||||
'name',
|
'name',
|
||||||
'country_id'
|
'country_id'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class CityGallerySerializer(serializers.ModelSerializer):
|
|
||||||
"""Serializer class for model CityGallery."""
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
"""Meta class"""
|
|
||||||
|
|
||||||
model = models.CityGallery
|
|
||||||
fields = [
|
|
||||||
'id',
|
|
||||||
'is_main',
|
|
||||||
]
|
|
||||||
|
|
||||||
@property
|
|
||||||
def request_kwargs(self):
|
|
||||||
"""Get url kwargs from request."""
|
|
||||||
return self.context.get('request').parser_context.get('kwargs')
|
|
||||||
|
|
||||||
def validate(self, attrs):
|
|
||||||
"""Override validate method."""
|
|
||||||
city_pk = self.request_kwargs.get('pk')
|
|
||||||
image_id = self.request_kwargs.get('image_id')
|
|
||||||
|
|
||||||
city_qs = models.City.objects.filter(pk=city_pk)
|
|
||||||
image_qs = Image.objects.filter(id=image_id)
|
|
||||||
|
|
||||||
if not city_qs.exists():
|
|
||||||
raise serializers.ValidationError({'detail': _('City not found')})
|
|
||||||
|
|
||||||
if not image_qs.exists():
|
|
||||||
raise serializers.ValidationError({'detail': _('Image not found')})
|
|
||||||
|
|
||||||
city = city_qs.first()
|
|
||||||
image = image_qs.first()
|
|
||||||
|
|
||||||
if image in city.gallery.all():
|
|
||||||
raise serializers.ValidationError({'detail': _('Image is already added.')})
|
|
||||||
|
|
||||||
attrs['city'] = city
|
|
||||||
attrs['image'] = image
|
|
||||||
|
|
||||||
return attrs
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,11 @@ class CityBaseSerializer(serializers.ModelSerializer):
|
||||||
'country',
|
'country',
|
||||||
'postal_code',
|
'postal_code',
|
||||||
'is_island',
|
'is_island',
|
||||||
|
'image',
|
||||||
]
|
]
|
||||||
|
extra_fields = {
|
||||||
|
'image': {'write_only': True}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class CityDetailSerializer(CityBaseSerializer):
|
class CityDetailSerializer(CityBaseSerializer):
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,6 @@ urlpatterns = [
|
||||||
path('cities/', views.CityListCreateView.as_view(), name='city-list-create'),
|
path('cities/', views.CityListCreateView.as_view(), name='city-list-create'),
|
||||||
path('cities/all/', views.CityListSearchView.as_view(), name='city-list-create'),
|
path('cities/all/', views.CityListSearchView.as_view(), name='city-list-create'),
|
||||||
path('cities/<int:pk>/', views.CityRUDView.as_view(), name='city-retrieve'),
|
path('cities/<int:pk>/', views.CityRUDView.as_view(), name='city-retrieve'),
|
||||||
path('cities/<int:pk>/gallery/', views.CityGalleryListView.as_view(),
|
|
||||||
name='gallery-list'),
|
|
||||||
path('cities/<int:pk>/gallery/<int:image_id>/',
|
|
||||||
views.CityGalleryCreateDestroyView.as_view(),
|
|
||||||
name='gallery-create-destroy'),
|
|
||||||
|
|
||||||
path('countries/', views.CountryListCreateView.as_view(), name='country-list-create'),
|
path('countries/', views.CountryListCreateView.as_view(), name='country-list-create'),
|
||||||
path('countries/<int:pk>/', views.CountryRUDView.as_view(), name='country-retrieve'),
|
path('countries/<int:pk>/', views.CountryRUDView.as_view(), name='country-retrieve'),
|
||||||
|
|
|
||||||
|
|
@ -67,57 +67,6 @@ class CityRUDView(common.CityViewMixin, generics.RetrieveUpdateDestroyAPIView):
|
||||||
permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin]
|
permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin]
|
||||||
|
|
||||||
|
|
||||||
class CityGalleryCreateDestroyView(common.CityViewMixin,
|
|
||||||
CreateDestroyGalleryViewMixin):
|
|
||||||
"""Resource for a create gallery for product for back-office users."""
|
|
||||||
serializer_class = serializers.CityGallerySerializer
|
|
||||||
permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin]
|
|
||||||
|
|
||||||
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.get('pk'))
|
|
||||||
gallery = get_object_or_404(city.city_gallery, image_id=self.kwargs.get('image_id'))
|
|
||||||
|
|
||||||
# May raise a permission denied
|
|
||||||
self.check_object_permissions(self.request, gallery)
|
|
||||||
|
|
||||||
return gallery
|
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
|
||||||
try:
|
|
||||||
return super(CityGalleryCreateDestroyView, self).create(request, *args, **kwargs)
|
|
||||||
except IntegrityError as e:
|
|
||||||
if not 'unique constraint' in e.args[0]:
|
|
||||||
raise e
|
|
||||||
models.CityGallery.objects.filter(city=kwargs['pk'], is_main=request.data['is_main']).delete()
|
|
||||||
return super(CityGalleryCreateDestroyView, self).create(request, *args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class CityGalleryListView(common.CityViewMixin,
|
|
||||||
generics.ListAPIView):
|
|
||||||
"""Resource for returning gallery for product for back-office users."""
|
|
||||||
serializer_class = ImageBaseSerializer
|
|
||||||
permission_classes = [IsAuthenticatedOrReadOnly | IsCountryAdmin]
|
|
||||||
|
|
||||||
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().crop_gallery
|
|
||||||
|
|
||||||
|
|
||||||
# Region
|
# Region
|
||||||
class RegionListCreateView(common.RegionViewMixin, generics.ListCreateAPIView):
|
class RegionListCreateView(common.RegionViewMixin, generics.ListCreateAPIView):
|
||||||
"""Create view for model Region"""
|
"""Create view for model Region"""
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user