fix Recipe Counts on food/keyword/unit serializer
This commit is contained in:
parent
ae14dde13d
commit
2e2080d8d1
@ -33,7 +33,7 @@ class ExtendedRecipeMixin(serializers.ModelSerializer):
|
|||||||
images = None
|
images = None
|
||||||
|
|
||||||
image = serializers.SerializerMethodField('get_image')
|
image = serializers.SerializerMethodField('get_image')
|
||||||
numrecipe = serializers.ReadOnlyField(source='count_recipes_test')
|
numrecipe = serializers.ReadOnlyField(source='recipe_count')
|
||||||
|
|
||||||
def get_fields(self, *args, **kwargs):
|
def get_fields(self, *args, **kwargs):
|
||||||
fields = super().get_fields(*args, **kwargs)
|
fields = super().get_fields(*args, **kwargs)
|
||||||
@ -58,9 +58,6 @@ class ExtendedRecipeMixin(serializers.ModelSerializer):
|
|||||||
if obj.recipe_image:
|
if obj.recipe_image:
|
||||||
return MEDIA_URL + 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):
|
class CustomDecimalField(serializers.Field):
|
||||||
"""
|
"""
|
||||||
@ -683,11 +680,11 @@ class ShoppingListRecipeSerializer(serializers.ModelSerializer):
|
|||||||
value = Decimal(value)
|
value = Decimal(value)
|
||||||
value = value.quantize(Decimal(1)) if value == value.to_integral() else value.normalize() # strips trailing zero
|
value = value.quantize(Decimal(1)) if value == value.to_integral() else value.normalize() # strips trailing zero
|
||||||
return (
|
return (
|
||||||
obj.name
|
obj.name
|
||||||
or getattr(obj.mealplan, 'title', None)
|
or getattr(obj.mealplan, 'title', None)
|
||||||
or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)])
|
or (d := getattr(obj.mealplan, 'date', None)) and ': '.join([obj.mealplan.recipe.name, str(d)])
|
||||||
or obj.recipe.name
|
or obj.recipe.name
|
||||||
) + f' ({value:.2g})'
|
) + f' ({value:.2g})'
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
if 'servings' in validated_data:
|
if 'servings' in validated_data:
|
||||||
|
@ -118,7 +118,7 @@ class ExtendedRecipeMixin():
|
|||||||
# add a recipe count annotation to the query
|
# add a recipe count annotation to the query
|
||||||
# explanation on construction https://stackoverflow.com/a/43771738/15762829
|
# 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')
|
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
|
# 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]
|
image_subquery = Recipe.objects.filter(**{recipe_filter: OuterRef('id')}, space=space).exclude(image__isnull=True).exclude(image__exact='').order_by("?").values('image')[:1]
|
||||||
|
Loading…
Reference in New Issue
Block a user