diff --git a/cookbook/serializer.py b/cookbook/serializer.py index dd632ad1..9daca509 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -140,14 +140,24 @@ class UnitSerializer(UniqueFieldsMixin, serializers.ModelSerializer): read_only_fields = ('id',) -class SupermarketCategorySerializer(serializers.ModelSerializer): +class SupermarketCategorySerializer(UniqueFieldsMixin, serializers.ModelSerializer): + + def create(self, validated_data): + # since multi select tags dont have id's + # duplicate names might be routed to create + obj, created = SupermarketCategory.objects.get_or_create(**validated_data) + return obj + + def update(self, instance, validated_data): + return super(SupermarketCategorySerializer, self).update(instance, validated_data) + class Meta: model = SupermarketCategory fields = ('id', 'name') class FoodSerializer(UniqueFieldsMixin, serializers.ModelSerializer): - supermarket_category = SupermarketCategorySerializer() + supermarket_category = SupermarketCategorySerializer(read_only=True) def create(self, validated_data): # since multi select tags dont have id's diff --git a/cookbook/templates/shopping_list.html b/cookbook/templates/shopping_list.html index 82601a52..ed42cf4f 100644 --- a/cookbook/templates/shopping_list.html +++ b/cookbook/templates/shopping_list.html @@ -361,7 +361,7 @@ this.shopping_list.entries.forEach(element => { let item = {} Object.assign(item, element); - if (entries.filter(item => item.food.id === element.food.id).length > 0) { + if (entries.filter(item => (item.food.id === element.food.id) && (item.unit.id === element.unit.id)).length > 0) { let entry = entries.filter(item => item.food.id === element.food.id)[0] entry.amount += item.amount * this.servings_cache[item.list_recipe] entry.entries.push(item.id)