Как обновить вложенный объект в Django?

#django #django-serializer

#джанго #джанго-сериализатор

Вопрос:

Я пытаюсь обновить вложенный объект в Django, но столкнулся с ошибкой с уже существующим идентификатором подобъекта. У меня есть эти две модели:

 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  

Итак, я вообще не добираюсь до метода обновления, когда передаю события в полезную нагрузку PUT, что я делаю не так?

Комментарии:

1. Вы должны задать свой новый вопрос в новом вопросе, а не редактировать текущий.