diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 288f0538..2a675a3b 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -33,7 +33,7 @@ class ExtendedRecipeMixin(serializers.ModelSerializer): images = None image = serializers.SerializerMethodField('get_image') - numrecipe = serializers.ReadOnlyField(source='count_recipes_test') + numrecipe = serializers.ReadOnlyField(source='recipe_count') def get_fields(self, *args, **kwargs): fields = super().get_fields(*args, **kwargs) @@ -58,9 +58,6 @@ class ExtendedRecipeMixin(serializers.ModelSerializer): if obj.recipe_image: return MEDIA_URL + obj.recipe_image - def count_recipes(self, obj): - return Recipe.objects.filter(**{self.recipe_filter: obj}, space=obj.space).count() - class CustomDecimalField(serializers.Field): """ @@ -683,11 +680,11 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer): value = Decimal(value) value = value.quantize(Decimal(1)) if value == value.to_integral() else value.normalize() # strips trailing zero return ( - obj.name - or getattr(obj.mealplan, 'title', None) - or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)]) - or obj.recipe.name - ) + f' ({value:.2g})' + obj.name + or getattr(obj.mealplan, 'title', None) + or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)]) + or obj.recipe.name + ) + f' ({value:.2g})' def update(self, instance, validated_data): if 'servings' in validated_data: diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 1d514056..8c685bed 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -118,7 +118,7 @@ class ExtendedRecipeMixin(): # add a recipe count annotation to the query # explanation on construction https://stackoverflow.com/a/43771738/15762829 recipe_count = Recipe.objects.filter(**{recipe_filter: OuterRef('id')}, space=space).values(recipe_filter).annotate(count=Count('pk')).values('count') - queryset = queryset.annotate(recipe_count_test=Coalesce(Subquery(recipe_count), 0)) + queryset = queryset.annotate(recipe_count=Coalesce(Subquery(recipe_count), 0)) # add a recipe image annotation to the query image_subquery = Recipe.objects.filter(**{recipe_filter: OuterRef('id')}, space=space).exclude(image__isnull=True).exclude(image__exact='').order_by("?").values('image')[:1]