adjust serializers update method
This commit is contained in:
parent
1649c23c17
commit
e964764977
@ -68,27 +68,38 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
return product
|
return product
|
||||||
|
|
||||||
def update(self,instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
new_quantity = validated_data.get("quantity", instance.quantity)
|
new_quantity = validated_data.get("quantity", instance.quantity)
|
||||||
quantity_difference = new_quantity - instance.quantity
|
new_warehouses = validated_data.pop('warehouses', [])
|
||||||
warehouses = validated_data.pop('warehouses', [])
|
|
||||||
|
|
||||||
|
old_warehouses = list(instance.warehouses.all())
|
||||||
|
old_quantity = instance.quantity
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
for warehouse in old_warehouses:
|
||||||
|
warehouse.refresh_from_db()
|
||||||
|
warehouse.actual_capacity = F('actual_capacity') + old_quantity
|
||||||
|
warehouse.save(update_fields=['actual_capacity'])
|
||||||
|
|
||||||
instance.name = validated_data.get("name", instance.name)
|
instance.name = validated_data.get("name", instance.name)
|
||||||
instance.description = validated_data.get("description", instance.description)
|
instance.description = validated_data.get("description", instance.description)
|
||||||
instance.quantity = new_quantity
|
instance.quantity = new_quantity
|
||||||
instance.warehouses.set(warehouses)
|
|
||||||
instance.save()
|
instance.save()
|
||||||
|
|
||||||
|
instance.warehouses.set(new_warehouses)
|
||||||
instance.refresh_from_db()
|
instance.refresh_from_db()
|
||||||
|
|
||||||
for warehouse in instance.warehouses.all():
|
for warehouse in instance.warehouses.all():
|
||||||
warehouse.refresh_from_db()
|
warehouse.refresh_from_db()
|
||||||
if warehouse.actual_capacity - quantity_difference < 0:
|
if warehouse.actual_capacity - new_quantity < 0:
|
||||||
raise serializers.ValidationError({
|
raise serializers.ValidationError({
|
||||||
'quantity': ["L'entrepôt n'a plus assez de place"]
|
'quantity': ["L'entrepôt n'a plus assez de place"]
|
||||||
})
|
})
|
||||||
warehouse.actual_capacity = F('actual_capacity') - quantity_difference
|
warehouse.actual_capacity = F('actual_capacity') - new_quantity
|
||||||
warehouse.save(update_fields=['actual_capacity'])
|
warehouse.save(update_fields=['actual_capacity'])
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
def destroy(self, instance):
|
def destroy(self, instance):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user