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:
parent
0037d037cf
commit
55f501d939
1 changed files with 23 additions and 4 deletions
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue