Как обновить вложенный объект в Django?
Я пытаюсь обновить вложенный объект в Django, но сталкиваюсь с ошибкой, когда id вложенного объекта уже существует. У меня есть две модели:
class Plan(models.Model):
planId = models.CharField(primary_key=True, max_length=100, unique=True)
name = models.CharField(max_length=200)
class PlanEvent(models.Model):
plan = models.ForeignKey(Plan, on_delete=models.CASCADE)
id = models.CharField(primary_key=True, max_length=100, unique=True, blank=False, null=False)
done = models.BooleanField()
title = models.CharField(max_length=100, blank=True)
У меня есть метод обновления в моем PlanSerializer
и он работает, если я отправляю PUT запрос с пустым events
списком, но если я включаю некоторые события, которые я хочу обновить, я получаю ошибку:
{
"events": [
{
"id": [
"plan event with this id already exists."
]
}
]
}
Это мой PlanSerializer
метод обновления:
class PlanSerializer(serializers.ModelSerializer):
events = PlanEventSerializer(many=True)
class Meta:
model = Plan
fields = ('planId', 'name', 'events')
def update(self, instance, validated_data):
events_validated_data = validated_data.pop('events')
events = (instance.events.all())
events = list(events)
instance.name = validated_data.get('name', instance.name)
instance.save()
for event_data in events_validated_data:
event = events.pop(0)
event.done= event_data.get('done', event.done)
event.title = event_data.get('title', event.title)
event.save()
return instance
Так я вообще не попадаю в update-метод, когда передаю события в PUT -payload, что я делаю не так?