card and wines getter
This commit is contained in:
parent
a9ad3ef7e7
commit
8488449cca
|
|
@ -537,6 +537,10 @@ class EstablishmentQuerySet(models.QuerySet):
|
||||||
def with_contacts(self):
|
def with_contacts(self):
|
||||||
return self.prefetch_related('emails', 'phones')
|
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,
|
class Establishment(GalleryMixin, ProjectBaseMixin, URLImageMixin,
|
||||||
TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin):
|
TranslatedFieldsMixin, HasTagsMixin, FavoritesMixin):
|
||||||
|
|
|
||||||
|
|
@ -815,6 +815,7 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
name_translated = TranslatedField(read_only=True)
|
name_translated = TranslatedField(read_only=True)
|
||||||
description_translated = TranslatedField(read_only=True)
|
description_translated = TranslatedField(read_only=True)
|
||||||
|
type = serializers.CharField(source='menu.type')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Plate
|
model = models.Plate
|
||||||
|
|
@ -825,6 +826,7 @@ class CardAndWinesPlatesSerializer(serializers.ModelSerializer):
|
||||||
'is_signature_plate',
|
'is_signature_plate',
|
||||||
'currency_code',
|
'currency_code',
|
||||||
'price',
|
'price',
|
||||||
|
'type',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -832,7 +834,7 @@ class CardAndWinesSerializer(serializers.ModelSerializer):
|
||||||
"""View to show menus(not formulas) with dishes for certain establishment"""
|
"""View to show menus(not formulas) with dishes for certain establishment"""
|
||||||
|
|
||||||
wine = EstablishmentBackOfficeWineSerializer(allow_null=True, read_only=True, source='back_office_wine')
|
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:
|
class Meta:
|
||||||
model = models.Establishment
|
model = models.Establishment
|
||||||
|
|
@ -840,10 +842,3 @@ class CardAndWinesSerializer(serializers.ModelSerializer):
|
||||||
'wine',
|
'wine',
|
||||||
'dishes',
|
'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
|
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,16 @@ class CardAndWinesListView(generics.RetrieveAPIView):
|
||||||
permission_classes = (AllowAny, )
|
permission_classes = (AllowAny, )
|
||||||
|
|
||||||
def get_object(self):
|
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):
|
class MenuListCreateView(generics.ListCreateAPIView):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user