Ger*_*los 2 python api django django-rest-framework angular
我无法使用补丁请求更新记录,我已经看到我必须添加更新方法,但我无法理解它实际上是如何工作的。我是 Django 的新手。
模式是mysql:
模型.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',)
Run Code Online (Sandbox Code Playgroud)
序列化程序.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')
Run Code Online (Sandbox Code Playgroud)
json 答案是正确的,但是当您要修改时,在这种情况下是一个带有对象的分支。不起作用。
例如:
要求:
{
"id": 2,
"item": {
"id": 2,
"codigo": "0002",
"descripcion": "Anilina"
},
"peso": 2000.1,
"medida": {
"id": 2,
"descripcion": "Kilogramos"
},
"sucursal": {
"id": 2,
"descripcion": "Magalena"
}
}
Run Code Online (Sandbox Code Playgroud)
修补:
{
"id": 2,
"item": {
"id": 2,
"codigo": "0002",
"descripcion": "Anilina"
},
"peso": 2000.1,
"medida": {
"id": 2,
"descripcion": "Kilogramos"
},
"sucursal": {
"id": 1,
"descripcion": "La Plata"
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您花时间阅读我的查询,并提前感谢您的回复。
在你的 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1272 次 |
最近记录: |