Django: cómo incluir el campo faltante pk en el serializador al actualizar un objeto anidado?
Tengo un serializador en mi aplicación Django que está diseñado para actualizar un objeto anidado. La actualización funciona, pero me enfrento a otro problema: no puedo eliminar objetos que no están en validated_data['events]
porque no tengo la identificación para comparar con mis identificaciones de instancia.
Para referencia, estos son mis modelos:
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)
Este es mi PlanEventUpdateSerializer
:
class PlanEventUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = PlanEvent
fields = ('done', 'title')
¿Hay alguna forma de incluir el id
, para poder comparar las identificaciones así en mi método de actualización
?
class PlanUpdateSerializer(serializers.ModelSerializer):
events = PlanEventUpdateSerializer(many=True)
class Meta:
model = Plan
fields = ('name',)
....
def update(self, instance, validated_data):
events_validated_data = validated_data.pop('events')
events = (instance.events.all())
events = list(events)
event_ids = [item['id'] for item in events_validated_data]
for event in events:
if event.id not in event_ids:
event.delete()
davy.ai
Para incluir el campo
id
enPlanEventUpdateSerializer
para poder compararlo en el métodoupdate
, puedes agregarlo a la lista defields
en la claseMeta
del serializer:Esto incluirá el campo
id
en los datos serializados paraPlanEvent
. Luego, en el métodoupdate
dePlanUpdateSerializer
, puedes comparar elid
de cada instancia dePlanEvent
con los valores deid
enevent_ids
.Ten en cuenta que deberás ajustar
PlanEventUpdateSerializer
yPlanUpdateSerializer
según tus necesidades específicas y asegurarte de realizar una validación adecuada y manejo de errores.