card and wines getter

This commit is contained in:
Kuroshini 2020-02-01 13:32:20 +03:00
parent a9ad3ef7e7
commit 8488449cca
3 changed files with 17 additions and 9 deletions

View File

@ -537,6 +537,10 @@ class EstablishmentQuerySet(models.QuerySet):
def with_contacts(self):
return self.prefetch_related('emails', 'phones')
def prefetch_plates(self):
"""Prefetches plates for card&wine backoffice section"""
return self.prefetch_related('menu_set', 'menu_set__plates', 'back_office_wine')
class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin):

View File

@ -815,6 +815,7 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
name_translated = TranslatedField(read_only=True)
description_translated = TranslatedField(read_only=True)
type = serializers.CharField(source='menu.type')
class Meta:
model = models.Plate
@ -825,6 +826,7 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
'is_signature_plate',
'currency_code',
'price',
'type',
)
@ -832,7 +834,7 @@ class CardAndWinesSerializer(serializers.ModelSerializer):
"""View to show menus(not formulas) with dishes for certain establishment"""
wine = EstablishmentBackOfficeWineSerializer(allow_null=True, read_only=True, source='back_office_wine')
dishes = serializers.SerializerMethodField(read_only=True)
dishes = CardAndWinesPlatesSerializer(many=True, source='card_and_wine_plates')
class Meta:
model = models.Establishment
@ -840,10 +842,3 @@ class CardAndWinesSerializer(serializers.ModelSerializer):
'wine',
'dishes',
)
def get_dishes(self, obj):
result = []
for menu in obj.menu_set.exclude(type=models.Menu.FORMULAS):
for plate in menu.plates.all():
result.append(CardAndWinesPlatesSerializer(plate).data)
return result

View File

@ -168,7 +168,16 @@ class CardAndWinesListView(generics.RetrieveAPIView):
permission_classes = (AllowAny, )
def get_object(self):
return get_object_or_404(models.Establishment, pk=self.kwargs['establishment_id'])
establishment = models.Establishment.objects.prefetch_plates()\
.filter(pk=self.kwargs['establishment_id'])\
.first()
if establishment is None:
raise Http404
plates = []
for menu in establishment.menu_set.prefetch_related('plates').exclude(type=Menu.FORMULAS):
plates += list(menu.plates.all().prefetch_related('menu'))
setattr(establishment, 'card_and_wine_plates', plates)
return establishment
class MenuListCreateView(generics.ListCreateAPIView):