GM-68: Реализовать метод возвращения списка избранного для пользователя

This commit is contained in:
Anatoly 2019-09-10 12:00:32 +03:00
parent 96ecdc69ca
commit 0647c46292
5 changed files with 74 additions and 9 deletions

View File

@ -125,22 +125,20 @@ class EstablishmentEmployeeSerializer(serializers.ModelSerializer):
fields = ('id', 'name', 'position_translated', 'awards')
class EstablishmentListSerializer(serializers.ModelSerializer):
"""Serializer for Establishment model."""
class EstablishmentBaseSerializer(serializers.ModelSerializer):
"""Base serializer for Establishment model."""
name_translated = serializers.CharField(allow_null=True)
type = EstablishmentTypeSerializer(source='establishment_type')
subtypes = EstablishmentSubTypeSerializer(many=True)
address = AddressSerializer()
tags = MetaDataContentSerializer(many=True)
preview_image = serializers.SerializerMethodField()
in_favorites = serializers.BooleanField()
class Meta:
"""Meta class."""
model = models.Establishment
fields = (
fields = [
'id',
'name_translated',
'price_level',
@ -151,8 +149,7 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
'preview_image',
'address',
'tags',
'in_favorites',
)
]
def get_preview_image(self, obj):
"""Get preview image"""
@ -160,6 +157,20 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
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):
"""Serializer for Establishment model."""
description_translated = serializers.CharField(allow_null=True)
@ -184,7 +195,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer):
"""Meta class."""
model = models.Establishment
fields = EstablishmentListSerializer.Meta.fields + (
fields = EstablishmentListSerializer.Meta.fields + [
'description_translated',
'price_level',
'image',
@ -202,7 +213,7 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer):
'menu',
'best_price_menu',
'best_price_carte',
)
]
def get_review(self, obj):
"""Serializer method for getting last published review"""

View File

@ -1 +1,17 @@
"""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
View 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
View 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"""

View File

@ -29,4 +29,5 @@ urlpatterns = [
path('main/', include('main.urls')),
path('translation/', include('translation.urls')),
path('comments/', include('comment.urls.web')),
path('favorites/', include('favorites.urls')),
]