From b3f05b0bfdf5bc3e77a154cdaea6d520bb5d50e8 Mon Sep 17 00:00:00 2001 From: smilerz Date: Thu, 13 Jan 2022 16:50:15 -0600 Subject: [PATCH] fix bug creating food with create form --- cookbook/models.py | 5 ++++- cookbook/serializer.py | 13 +++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/cookbook/models.py b/cookbook/models.py index cfe4ab81..1f4562c0 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -77,7 +77,10 @@ class TreeManager(MP_NodeManager): for field in many_to_many: field_model = getattr(obj, field).model for related_obj in many_to_many[field]: - getattr(obj, field).add(field_model.objects.get(**dict(related_obj))) + if isinstance(related_obj, User): + getattr(obj, field).add(field_model.objects.get(id=related_obj.id)) + else: + getattr(obj, field).add(field_model.objects.get(**dict(related_obj))) return obj, True except IntegrityError as e: if 'Key (path)' in e.args[0]: diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 48236f39..0fa2ee21 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -394,15 +394,20 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR validated_data['supermarket_category'], sc_created = SupermarketCategory.objects.get_or_create( name=validated_data.pop('supermarket_category')['name'], space=self.context['request'].space) - onhand = validated_data.get('food_onhand', None) + onhand = validated_data.pop('food_onhand', None) # assuming if on hand for user also onhand for shopping_share users if not onhand is None: shared_users = [user := self.context['request'].user] + list(user.userpreference.shopping_share.all()) - if onhand: - validated_data['onhand_users'] = list(self.instance.onhand_users.all()) + shared_users + if self.instance: + onhand_users = self.instance.onhand_users.all() else: - validated_data['onhand_users'] = list(set(self.instance.onhand_users.all()) - set(shared_users)) + onhand_users = [] + if onhand: + validated_data['onhand_users'] = list(onhand_users) + shared_users + else: + validated_data['onhand_users'] = list(set(onhand_users) - set(shared_users)) + obj, created = Food.objects.get_or_create(**validated_data) return obj