I can not update records with a patch request, I have seen that I must add the update method, but I can not understand how it actually works. I'm new to django.
The modes is mysql:
model.py
class Medida(models.Model):
descripcion = models.CharField(max_length = 100)
class Meta:
ordering = ('descripcion',)
class Sucursal(models.Model):
descripcion = models.CharField(max_length = 100)
class Meta:
ordering = ('descripcion',)
class Item(models.Model):
codigo = models.CharField(max_length = 4)
descripcion = models.CharField(max_length = 100)
class Meta:
ordering = ('codigo',)
class Almacen(models.Model):
item = models.ForeignKey(Item, on_delete = models.CASCADE)
peso = models.FloatField()
medida = models.ForeignKey(Medida, on_delete = models.CASCADE)
sucursal = models.ForeignKey(Sucursal, on_delete = models.CASCADE)
class Meta:
ordering = ('item',)
serializers.py
class MedidaSerializer(serializers.ModelSerializer):
class Meta:
model = Medida
fields = ('id', 'descripcion')
class SucursalSerializer(serializers.ModelSerializer):
class Meta:
model = Sucursal
fields = ('id', 'descripcion')
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = ('id', 'codigo', 'descripcion')
class AlmacenSerializer(serializers.ModelSerializer):
medida = MedidaSerializer(read_only = True)
item = ItemSerializer(read_only = True)
sucursal = SucursalSerializer(read_only = False)
class Meta:
model = Almacen
fields = ('id', 'item', 'peso', 'medida', 'sucursal')
The json answer is correct, but when you want to modify, in this case a branch with an object. Does not work.
For example:
Request:
{
"id": 2,
"item": {
"id": 2,
"codigo": "0002",
"descripcion": "Anilina"
},
"peso": 2000.1,
"medida": {
"id": 2,
"descripcion": "Kilogramos"
},
"sucursal": {
"id": 2,
"descripcion": "Magalena"
}
}
Patch:
{
"id": 2,
"item": {
"id": 2,
"codigo": "0002",
"descripcion": "Anilina"
},
"peso": 2000.1,
"medida": {
"id": 2,
"descripcion": "Kilogramos"
},
"sucursal": {
"id": 1,
"descripcion": "La Plata"
}
}
Thanks for taking the time to read my query and, thank you in advance for the response.
Try this code into your AlmacenSerializer.
def update(self, instance, validated_data):
item_data = validated_data.pop('item')
medida_data = validated_data.pop('medida')
sucursal_data = validated_data.pop('sucursal')
item = instance.item
for k, v in item_data.items():
setattr(item, k, v)
item.save()
medida = instance.medida
for k, v in medida_data.items():
setattr(medida, k, v)
medida.save()
sucursal = instance.sucursal
for k, v in sucursal_data.items():
setattr(sucursal, k, v)
sucursal.save()
instance.peso = validated_data.get('peso', instance.peso)
instance.save()
return instance
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With