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):
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user