establishment carousel web and mobile api
This commit is contained in:
parent
fa183bfc92
commit
a5d5dc1335
|
|
@ -395,6 +395,7 @@ class Establishment(GalleryModelMixin, ProjectBaseMixin, URLImageMixin,
|
||||||
verbose_name=_('Tag'))
|
verbose_name=_('Tag'))
|
||||||
reviews = generic.GenericRelation(to='review.Review')
|
reviews = generic.GenericRelation(to='review.Review')
|
||||||
comments = generic.GenericRelation(to='comment.Comment')
|
comments = generic.GenericRelation(to='comment.Comment')
|
||||||
|
carousels = generic.GenericRelation(to='main.Carousel')
|
||||||
favorites = generic.GenericRelation(to='favorites.Favorites')
|
favorites = generic.GenericRelation(to='favorites.Favorites')
|
||||||
currency = models.ForeignKey(Currency, blank=True, null=True, default=None,
|
currency = models.ForeignKey(Currency, blank=True, null=True, default=None,
|
||||||
on_delete=models.PROTECT,
|
on_delete=models.PROTECT,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from review.serializers import ReviewShortSerializer
|
||||||
from tag.serializers import TagBaseSerializer
|
from tag.serializers import TagBaseSerializer
|
||||||
from timetable.serialziers import ScheduleRUDSerializer
|
from timetable.serialziers import ScheduleRUDSerializer
|
||||||
from utils import exceptions as utils_exceptions
|
from utils import exceptions as utils_exceptions
|
||||||
from utils.serializers import ImageBaseSerializer
|
from utils.serializers import ImageBaseSerializer, CarouselCreateSerializer
|
||||||
from utils.serializers import (ProjectModelSerializer, TranslatedField,
|
from utils.serializers import (ProjectModelSerializer, TranslatedField,
|
||||||
FavoritesCreateSerializer)
|
FavoritesCreateSerializer)
|
||||||
|
|
||||||
|
|
@ -426,6 +426,27 @@ class EstablishmentFavoritesCreateSerializer(FavoritesCreateSerializer):
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentCarouselCreateSerializer(CarouselCreateSerializer):
|
||||||
|
"""Serializer to carousel object w/ model News."""
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
establishment = models.Establishment.objects.filter(slug=self.slug).first()
|
||||||
|
if not establishment:
|
||||||
|
raise serializers.ValidationError({'detail': _('Object not found.')})
|
||||||
|
|
||||||
|
if establishment.carousels.exists():
|
||||||
|
raise utils_exceptions.CarouselError()
|
||||||
|
|
||||||
|
attrs['establishment'] = establishment
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
def create(self, validated_data, *args, **kwargs):
|
||||||
|
validated_data.update({
|
||||||
|
'content_object': validated_data.pop('establishment')
|
||||||
|
})
|
||||||
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
class CompanyBaseSerializer(serializers.ModelSerializer):
|
class CompanyBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Company base serializer"""
|
"""Company base serializer"""
|
||||||
phone_list = serializers.SerializerMethodField(source='phones', read_only=True)
|
phone_list = serializers.SerializerMethodField(source='phones', read_only=True)
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,7 @@ urlpatterns = [
|
||||||
path('slug/<slug:slug>/comments/<int:comment_id>/', views.EstablishmentCommentRUDView.as_view(),
|
path('slug/<slug:slug>/comments/<int:comment_id>/', views.EstablishmentCommentRUDView.as_view(),
|
||||||
name='rud-comment'),
|
name='rud-comment'),
|
||||||
path('slug/<slug:slug>/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(),
|
path('slug/<slug:slug>/favorites/', views.EstablishmentFavoritesCreateDestroyView.as_view(),
|
||||||
name='create-destroy-favorites')
|
name='create-destroy-favorites'),
|
||||||
|
path('slug/<slug:slug>/carousels/', views.EstablishmentCarouselCreateDestroyView.as_view(),
|
||||||
|
name='create-destroy-carousels')
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from comment.serializers import CommentRUDSerializer
|
||||||
from establishment import filters, models, serializers
|
from establishment import filters, models, serializers
|
||||||
from main import methods
|
from main import methods
|
||||||
from utils.pagination import EstablishmentPortionPagination
|
from utils.pagination import EstablishmentPortionPagination
|
||||||
from utils.views import FavoritesCreateDestroyMixinView
|
from utils.views import FavoritesCreateDestroyMixinView, CarouselCreateDestroyMixinView
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentMixinView:
|
class EstablishmentMixinView:
|
||||||
|
|
@ -34,7 +34,7 @@ class EstablishmentListView(EstablishmentMixinView, generics.ListAPIView):
|
||||||
serializer_class = serializers.EstablishmentListRetrieveSerializer
|
serializer_class = serializers.EstablishmentListRetrieveSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return super().get_queryset().with_schedule()\
|
return super().get_queryset().with_schedule() \
|
||||||
.with_extended_address_related().with_currency_related()
|
.with_extended_address_related().with_currency_related()
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -105,9 +105,9 @@ class EstablishmentCommentListView(generics.ListAPIView):
|
||||||
|
|
||||||
establishment = get_object_or_404(models.Establishment, slug=self.kwargs['slug'])
|
establishment = get_object_or_404(models.Establishment, slug=self.kwargs['slug'])
|
||||||
return comment_models.Comment.objects.by_content_type(app_label='establishment',
|
return comment_models.Comment.objects.by_content_type(app_label='establishment',
|
||||||
model='establishment')\
|
model='establishment') \
|
||||||
.by_object_id(object_id=establishment.pk)\
|
.by_object_id(object_id=establishment.pk) \
|
||||||
.order_by('-created')
|
.order_by('-created')
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentCommentRUDView(generics.RetrieveUpdateDestroyAPIView):
|
class EstablishmentCommentRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
|
|
@ -139,6 +139,13 @@ class EstablishmentFavoritesCreateDestroyView(FavoritesCreateDestroyMixinView):
|
||||||
serializer_class = serializers.EstablishmentFavoritesCreateSerializer
|
serializer_class = serializers.EstablishmentFavoritesCreateSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentCarouselCreateDestroyView(CarouselCreateDestroyMixinView):
|
||||||
|
"""View for create/destroy establishment from carousel."""
|
||||||
|
|
||||||
|
_model = models.Establishment
|
||||||
|
serializer_class = serializers.EstablishmentCarouselCreateSerializer
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentNearestRetrieveView(EstablishmentListView, generics.ListAPIView):
|
class EstablishmentNearestRetrieveView(EstablishmentListView, generics.ListAPIView):
|
||||||
"""Resource for getting list of nearest establishments."""
|
"""Resource for getting list of nearest establishments."""
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user