@scrz

Django Rest Framework Как достать instance (Экземпляр) foreign key?

Объясню суть, так как словарный запас не богат терминами.
При создании нового 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--------------------
  • Вопрос задан
  • 21 просмотр
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Реализуйте метод модели, который делает то, что вам надо, и просто вызывайте его в update.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Junto Москва
от 80 000 до 120 000 ₽
Верфь Екатеринбург
от 70 000 до 140 000 ₽
Большая Тройка Москва
от 120 000 до 200 000 ₽
23 сент. 2020, в 06:18
20000 руб./за проект
23 сент. 2020, в 06:11
2000 руб./за проект
23 сент. 2020, в 00:43
40000 руб./за проект