1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 21:09:37 +02:00

fix: handle user_id correctly in ChecklistItem creation and updates to avoid constraint issues

This commit is contained in:
Sean Morley 2025-06-08 13:15:43 -04:00
parent 0037d037cf
commit 55f501d939

View file

@ -271,6 +271,7 @@ class ChecklistItemSerializer(CustomModelSerializer):
class ChecklistSerializer(CustomModelSerializer): class ChecklistSerializer(CustomModelSerializer):
items = ChecklistItemSerializer(many=True, source='checklistitem_set') items = ChecklistItemSerializer(many=True, source='checklistitem_set')
class Meta: class Meta:
model = Checklist model = Checklist
fields = [ fields = [
@ -281,8 +282,16 @@ class ChecklistSerializer(CustomModelSerializer):
def create(self, validated_data): def create(self, validated_data):
items_data = validated_data.pop('checklistitem_set') items_data = validated_data.pop('checklistitem_set')
checklist = Checklist.objects.create(**validated_data) checklist = Checklist.objects.create(**validated_data)
for item_data in items_data: for item_data in items_data:
ChecklistItem.objects.create(checklist=checklist, **item_data) # Remove user_id from item_data to avoid constraint issues
item_data.pop('user_id', None)
# Set user_id from the parent checklist
ChecklistItem.objects.create(
checklist=checklist,
user_id=checklist.user_id,
**item_data
)
return checklist return checklist
def update(self, instance, validated_data): def update(self, instance, validated_data):
@ -300,6 +309,9 @@ class ChecklistSerializer(CustomModelSerializer):
# Update or create items # Update or create items
updated_item_ids = set() updated_item_ids = set()
for item_data in items_data: for item_data in items_data:
# Remove user_id from item_data to avoid constraint issues
item_data.pop('user_id', None)
item_id = item_data.get('id') item_id = item_data.get('id')
if item_id: if item_id:
if item_id in current_item_ids: if item_id in current_item_ids:
@ -310,10 +322,18 @@ class ChecklistSerializer(CustomModelSerializer):
updated_item_ids.add(item_id) updated_item_ids.add(item_id)
else: else:
# If ID is provided but doesn't exist, create new item # If ID is provided but doesn't exist, create new item
ChecklistItem.objects.create(checklist=instance, **item_data) ChecklistItem.objects.create(
checklist=instance,
user_id=instance.user_id,
**item_data
)
else: else:
# If no ID is provided, create new item # If no ID is provided, create new item
ChecklistItem.objects.create(checklist=instance, **item_data) ChecklistItem.objects.create(
checklist=instance,
user_id=instance.user_id,
**item_data
)
# Delete items that are not in the updated data # Delete items that are not in the updated data
items_to_delete = current_item_ids - updated_item_ids items_to_delete = current_item_ids - updated_item_ids
@ -329,7 +349,6 @@ class ChecklistSerializer(CustomModelSerializer):
raise serializers.ValidationError( raise serializers.ValidationError(
'Checklists associated with a public collection must be public.' 'Checklists associated with a public collection must be public.'
) )
return data return data
class CollectionSerializer(CustomModelSerializer): class CollectionSerializer(CustomModelSerializer):