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