added flag in_favorites in establishment
This commit is contained in:
parent
2f5240adfa
commit
273f74f911
|
|
@ -88,6 +88,20 @@ class EstablishmentQuerySet(models.QuerySet):
|
|||
'position'),
|
||||
to_attr='actual_establishment_employees'))
|
||||
|
||||
def annotate_in_favorites(self, user):
|
||||
"""Annotate flag in_favorites"""
|
||||
favorite_establishments = []
|
||||
if user.is_authenticated:
|
||||
favorite_establishments = user.favorites.by_content_type(app_label='establishment',
|
||||
model='establishment')\
|
||||
.values_list('object_id', flat=True)
|
||||
return self.annotate(in_favorites=models.Case(
|
||||
models.When(
|
||||
id__in=favorite_establishments,
|
||||
then=True),
|
||||
default=False,
|
||||
output_field=models.BooleanField(default=False)))
|
||||
|
||||
|
||||
class Establishment(ProjectBaseMixin, ImageMixin, TranslatedFieldsMixin):
|
||||
"""Establishment model."""
|
||||
|
|
|
|||
|
|
@ -134,6 +134,7 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
|
|||
address = AddressSerializer()
|
||||
tags = MetaDataContentSerializer(many=True)
|
||||
preview_image = serializers.SerializerMethodField()
|
||||
in_favorites = serializers.BooleanField()
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
|
@ -150,6 +151,7 @@ class EstablishmentListSerializer(serializers.ModelSerializer):
|
|||
'preview_image',
|
||||
'address',
|
||||
'tags',
|
||||
'in_favorites',
|
||||
)
|
||||
|
||||
def get_preview_image(self, obj):
|
||||
|
|
@ -177,6 +179,8 @@ class EstablishmentDetailSerializer(EstablishmentListSerializer):
|
|||
best_price_menu = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True)
|
||||
best_price_carte = serializers.DecimalField(max_digits=14, decimal_places=2, read_only=True)
|
||||
|
||||
in_favorites = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
"""Meta class."""
|
||||
|
||||
|
|
@ -302,8 +306,8 @@ class EstablishmentFavoritesCreateSerializer(serializers.ModelSerializer):
|
|||
|
||||
# Check existence in favorites
|
||||
if self.get_user().favorites.by_content_type(app_label='establishment',
|
||||
model='establishment',
|
||||
object_id=establishment_id).exists():
|
||||
model='establishment')\
|
||||
.by_object_id(object_id=establishment_id).exists():
|
||||
raise utils_exceptions.FavoritesError()
|
||||
|
||||
attrs['establishment'] = establishment_qs.first()
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ class EstablishmentListView(EstablishmentMixin, JWTGenericViewMixin, generics.Li
|
|||
def get_queryset(self):
|
||||
"""Overrided method 'get_queryset'."""
|
||||
qs = super(EstablishmentListView, self).get_queryset()
|
||||
return qs.by_country_code(code=self.request.country_code)
|
||||
return qs.by_country_code(code=self.request.country_code)\
|
||||
.annotate_in_favorites(user=self.request.user)
|
||||
|
||||
|
||||
class EstablishmentRetrieveView(EstablishmentMixin, JWTGenericViewMixin, generics.RetrieveAPIView):
|
||||
|
|
@ -98,8 +99,8 @@ class EstablishmentFavoritesCreateDestroyView(generics.CreateAPIView, generics.D
|
|||
obj = get_object_or_404(
|
||||
self.request.user.favorites.by_user(user=self.request.user)
|
||||
.by_content_type(app_label='establishment',
|
||||
model='establishment',
|
||||
object_id=self.kwargs['pk']))
|
||||
model='establishment')
|
||||
.by_object_id(object_id=self.kwargs['pk']))
|
||||
# May raise a permission denied
|
||||
self.check_object_permissions(self.request, obj)
|
||||
return obj
|
||||
|
|
|
|||
|
|
@ -10,11 +10,14 @@ from utils.models import ProjectBaseMixin
|
|||
class FavoritesQuerySet(models.QuerySet):
|
||||
"""QuerySet for model Favorites"""
|
||||
|
||||
def by_content_type(self, app_label, model, object_id):
|
||||
def by_object_id(self, object_id: int):
|
||||
"""Filter by object_id"""
|
||||
return self.filter(object_id=object_id)
|
||||
|
||||
def by_content_type(self, app_label, model):
|
||||
"""Filter QuerySet by ContentType."""
|
||||
return self.filter(content_type=get_contenttype(app_label=app_label,
|
||||
model=model),
|
||||
object_id=object_id)
|
||||
model=model))
|
||||
|
||||
def by_user(self, user):
|
||||
"""Filter by user"""
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user