GM-68: Реализовать метод возвращения списка избранного для пользователя
This commit is contained in:
parent
96ecdc69ca
commit
0647c46292
|
|
@ -125,22 +125,20 @@ class EstablishmentEmployeeSerializer(serializers.ModelSerializer):
|
||||||
fields = ('id', 'name', 'position_translated', 'awards')
|
fields = ('id', 'name', 'position_translated', 'awards')
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentListSerializer(serializers.ModelSerializer):
|
class EstablishmentBaseSerializer(serializers.ModelSerializer):
|
||||||
"""Serializer for Establishment model."""
|
"""Base serializer for Establishment model."""
|
||||||
|
|
||||||
name_translated = serializers.CharField(allow_null=True)
|
name_translated = serializers.CharField(allow_null=True)
|
||||||
type = EstablishmentTypeSerializer(source='establishment_type')
|
type = EstablishmentTypeSerializer(source='establishment_type')
|
||||||
subtypes = EstablishmentSubTypeSerializer(many=True)
|
subtypes = EstablishmentSubTypeSerializer(many=True)
|
||||||
address = AddressSerializer()
|
address = AddressSerializer()
|
||||||
tags = MetaDataContentSerializer(many=True)
|
tags = MetaDataContentSerializer(many=True)
|
||||||
preview_image = serializers.SerializerMethodField()
|
preview_image = serializers.SerializerMethodField()
|
||||||
in_favorites = serializers.BooleanField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
model = models.Establishment
|
model = models.Establishment
|
||||||
fields = (
|
fields = [
|
||||||
'id',
|
'id',
|
||||||
'name_translated',
|
'name_translated',
|
||||||
'price_level',
|
'price_level',
|
||||||
|
|
@ -151,8 +149,7 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
|
||||||
'preview_image',
|
'preview_image',
|
||||||
'address',
|
'address',
|
||||||
'tags',
|
'tags',
|
||||||
'in_favorites',
|
]
|
||||||
)
|
|
||||||
|
|
||||||
def get_preview_image(self, obj):
|
def get_preview_image(self, obj):
|
||||||
"""Get preview image"""
|
"""Get preview image"""
|
||||||
|
|
@ -160,6 +157,20 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
|
||||||
thumbnail_key='establishment_preview')
|
thumbnail_key='establishment_preview')
|
||||||
|
|
||||||
|
|
||||||
|
class EstablishmentListSerializer(EstablishmentBaseSerializer):
|
||||||
|
"""Serializer for Establishment model."""
|
||||||
|
# Annotated fields
|
||||||
|
in_favorites = serializers.BooleanField(allow_null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
|
||||||
|
model = models.Establishment
|
||||||
|
fields = EstablishmentBaseSerializer.Meta.fields + [
|
||||||
|
'in_favorites',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class EstablishmentDetailSerializer(EstablishmentListSerializer):
|
class EstablishmentDetailSerializer(EstablishmentListSerializer):
|
||||||
"""Serializer for Establishment model."""
|
"""Serializer for Establishment model."""
|
||||||
description_translated = serializers.CharField(allow_null=True)
|
description_translated = serializers.CharField(allow_null=True)
|
||||||
|
|
@ -184,7 +195,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer):
|
||||||
"""Meta class."""
|
"""Meta class."""
|
||||||
|
|
||||||
model = models.Establishment
|
model = models.Establishment
|
||||||
fields = EstablishmentListSerializer.Meta.fields + (
|
fields = EstablishmentListSerializer.Meta.fields + [
|
||||||
'description_translated',
|
'description_translated',
|
||||||
'price_level',
|
'price_level',
|
||||||
'image',
|
'image',
|
||||||
|
|
@ -202,7 +213,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer):
|
||||||
'menu',
|
'menu',
|
||||||
'best_price_menu',
|
'best_price_menu',
|
||||||
'best_price_carte',
|
'best_price_carte',
|
||||||
)
|
]
|
||||||
|
|
||||||
def get_review(self, obj):
|
def get_review(self, obj):
|
||||||
"""Serializer method for getting last published review"""
|
"""Serializer method for getting last published review"""
|
||||||
|
|
|
||||||
|
|
@ -1 +1,17 @@
|
||||||
"""Serializers for app favorites."""
|
"""Serializers for app favorites."""
|
||||||
|
from .models import Favorites
|
||||||
|
from rest_framework import serializers
|
||||||
|
from establishment.serializers import EstablishmentBaseSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class FavoritesEstablishmentListSerializer(serializers.ModelSerializer):
|
||||||
|
"""Serializer for model Favorites"""
|
||||||
|
detail = EstablishmentBaseSerializer(source='content_object')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
"""Meta class."""
|
||||||
|
model = Favorites
|
||||||
|
fields = (
|
||||||
|
'id',
|
||||||
|
'detail',
|
||||||
|
)
|
||||||
|
|
|
||||||
12
apps/favorites/urls.py
Normal file
12
apps/favorites/urls.py
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
"""Favorites urlpaths."""
|
||||||
|
from django.urls import path
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
|
app_name = 'favorites'
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('establishments/', views.FavoritesEstablishmentListView.as_view(),
|
||||||
|
name='establishment-list'),
|
||||||
|
path('remove/<int:pk>/', views.FavoritesDestroyView.as_view(), name='delete-favorites'),
|
||||||
|
]
|
||||||
25
apps/favorites/views.py
Normal file
25
apps/favorites/views.py
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
"""Views for app favorites."""
|
||||||
|
from rest_framework import generics
|
||||||
|
from .serializers import FavoritesEstablishmentListSerializer
|
||||||
|
from .models import Favorites
|
||||||
|
|
||||||
|
|
||||||
|
class FavoritesBaseView(generics.GenericAPIView):
|
||||||
|
"""Base view for Favorites."""
|
||||||
|
def get_queryset(self):
|
||||||
|
"""Override get_queryset method."""
|
||||||
|
return Favorites.objects.by_user(self.request.user)
|
||||||
|
|
||||||
|
|
||||||
|
class FavoritesEstablishmentListView(FavoritesBaseView, generics.ListAPIView):
|
||||||
|
"""List views for favorites"""
|
||||||
|
serializer_class = FavoritesEstablishmentListSerializer
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
"""Override get_queryset method"""
|
||||||
|
return super().get_queryset().by_content_type(app_label='establishment',
|
||||||
|
model='establishment')
|
||||||
|
|
||||||
|
|
||||||
|
class FavoritesDestroyView(FavoritesBaseView, generics.DestroyAPIView):
|
||||||
|
"""Destroy view for favorites"""
|
||||||
|
|
@ -29,4 +29,5 @@ urlpatterns = [
|
||||||
path('main/', include('main.urls')),
|
path('main/', include('main.urls')),
|
||||||
path('translation/', include('translation.urls')),
|
path('translation/', include('translation.urls')),
|
||||||
path('comments/', include('comment.urls.web')),
|
path('comments/', include('comment.urls.web')),
|
||||||
|
path('favorites/', include('favorites.urls')),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user