Create method for foreign key in nested serializer

Viewed 20

I have an error when I try to create a new data. I was looking for information about my error and all of them recommended me to implement a create method in the serializers. I implemented that method but at the time of creating the data, it isnt creating the data that are called through the foreign key.

apps.sip_telefono.models

class marca_telefono(models.Model):
   id_marca_telefono = models.AutoField(primary_key=True)
   no_marca_telefono = models.CharField(max_length=100, blank=True, null=True,)

class modelo_telefono(models.Model):
   id_modelo_telefono = models.AutoField(primary_key=True)
   no_modelo_telefono = models.CharField(max_length=100, blank=True, null=True,)
   id_marca_telefono = models.ForeignKey(marca_telefono, on_delete=models.CASCADE)

class sip_telefono(models.Model):
   id_sip_telefono = models.AutoField(primary_key=True)
   id_marca_telefono = models.ForeignKey(marca_telefono, on_delete=models.CASCADE, blank=True, null=True,)
   id_modelo_telefono = models.ForeignKey(modelo_telefono, on_delete=models.CASCADE, blank=True, null=True,)
   no_mac = models.CharField(max_length=100, blank=True, null=True,)

appps.anexos_sip.model

class sip_buddies(models.Model):
   id_sip = models.AutoField(primary_key=True)
   name = models.CharField(max_length=80, unique=True)
   type = models.CharField(max_length=6, default='friend')
   telefono = models.ForeignKey(sip_telefono, on_delete=models.CASCADE, 
                               blank=True, null=True,related_name="telefono")

apps.anexos_sip.serializer

class SipTelefonoSerializer(serializers.ModelSerializer):
   id_marca_telefono = serializers.CharField(source ='id_marca_telefono.no_marca_telefono')
   id_modelo_telefono = serializers.CharField(source ='id_modelo_telefono.no_modelo_telefono')
   class Meta:
       model = sip_telefono
       fields = ('id_marca_telefono','id_modelo_telefono','no_mac')

class AnexoListarSerializer(serializers.ModelSerializer):
   telefono = SipTelefonoSerializer(required=False)

   class Meta:
       model = sip_buddies
       fields = ('name', 'type', 'telefono')

   def create(self,validated_data): 
       telefono_data = validated_data.pop('telefono', None)         
       sip = sip_buddies.objects.create(**validated_data)
       sip.save()

       for tel in telefono_data:
           sip_telefono.objects.create(sip=sip, **tel)
       return sip
   
   def update(self,instance,validated_data):
       instance.name = validated_data.get('name',instance.name)
       instance.type= validated_data.get('type',instance.type)
       instance.save()
       
       telefono_data = validated_data.pop('telefono')        
       tel = instance.telefono
       tel.id_marca_telefono = telefono_data.get('id_marca_telefono',tel.id_marca_telefono)
       tel.id_modelo_telefono = telefono_data.get('id_modelo_telefono',tel.id_modelo_telefono)
       tel.no_mac = telefono_data.get('no_mac',tel.no_mac)
       tel.save()
       return instance
0 Answers
Related