Объясню суть, так как словарный запас не богат терминами.
При создании нового
App_form
Добавляется
ChosenProduct что содержит в себе продукт из
Warehouse
и количество продукта добавленного в ChosenProduct уменьшается.
Теперь при изменении App_form то-есть изменении значения
terminated на
true методом
patch этот App_form попадает скажем в архив, и в то же время продукты из
chosen_products должны вернуться в
Warehouse как количество , а после
chosen_products очищается.
class WarehouseSerializer(serializers.ModelSerializer):
category_name = serializers.ReadOnlyField(
source='category_product.category_name')
posted_user = serializers.ReadOnlyField(
source='posted_user.username')
class Meta:
model = Warehouse
fields = ['id', 'category_product', 'category_name', 'condition',
'product_name', 'amount', 'barcode', 'f_price', 'created_at', 'updated_at', 'posted_user']
class ChosenProductSerializer(serializers.ModelSerializer):
product_info = WarehouseSerializer(source='product', read_only=True)
period_info = Product_periodSerializer(source='period', read_only=True)
class Meta:
model = ChosenProduct
exclude = ('app_form',)
class App_formSerializer(serializers.ModelSerializer):
chosen_products = ChosenProductSerializer(many=True)
@transaction.atomic
def create(self, validated_data):
chosen_products_data = validated_data.pop('chosen_products')
app_form = App_form.objects.create(**validated_data)
for chosen_product_data in chosen_products_data:
chosen_product = ChosenProduct.objects.create(app_form=app_form, **chosen_product_data)
product = chosen_product.product
product.amount = product.amount - chosen_product.quantity
product.save()
return app_form
def update(self, instance, validated_data):
instance.terminated = validated_data.get('terminated', instance.terminated)
if instance.terminated == True :
print('-----------TRUE--------------------')
print(instance.chosen_products)
print('-----------PRINT--------------------')
instance.save()
return instance
class Meta:
model = App_form
fields = '__all__'
OUT:
-----------TRUE--------------------
creditapi.ChosenProduct.None
-----------PRINT--------------------