Я не могу создать связанные таблицы в django с помощью сериализаторов

Пожалуйста, помогите! Мне нужно создать базу данных акций postgresQL. Я использую команду в Visual Studio Code. Но у меня ошибка на строке "StockProduct.objects.create" в serializers.py. Склад создается в базе, но без продуктов на этом складе.

команда в Visual Studio Code:

###

# create a stock
POST {{baseUrl}}/stocks/
Content-Type: application/json

{
  "address": " stock_ address ru3",
  "positions": [{"product": 2, "quantity": 250, "price": 120.50}, 
                {"product": 3, "quantity": 100, "price": 180}]
}

serializers.py

    class ProductSerializer(serializers.ModelSerializer):
        class Meta:
            model = Product
            fields = ('title', 'description')
    
    class ProductPositionSerializer(serializers.ModelSerializer):
        class Meta:
            model = StockProduct
            fields = ('quantity', 'price')
    
    class StockSerializer(serializers.ModelSerializer):
        positions = ProductPositionSerializer(many=True)
        #id = serializers.IntegerField()
        # configure the serializer for the warehouse
        class Meta:
            model = Stock
            fields = ('address', 'positions')
    
    
        def create(self, validated_data):
            positions = validated_data.pop('positions')
            # create stock 
            stock = super().create(validated_data)
            for position in positions:
                StockProduct.objects.create(stock=stock, product_id=position['product'], price=position['price'], quantity=position['quantity'])# 1.Variant
                #StockProduct.objects.create(stock=stock, **position) # 2. variant
                                           # defaults = {'price'=position['price'], 'quantity'=position['quantity']})
             #product=position['product'], price=position['price'], quantity=position['quantity'])
            #    StockProduct.objects.create(position) #position=position
            #     StockProduct.objects.create(stock('id'), position)
            #StockProduct.objects.create(positions)
                # quantity = position.pop('quantity')
                # price= position.pop('price')
                # StockProduct.objects.create(quantity=quantity, price=price)
            return stock

вариант Ошибка

# 1 variant Error . line 36, in create  StockProduct.objects.create(stock=stock, product_id=position['product'], price=position['price'], quantity=position['quantity'])   KeyError: 'product'
# 2. variant: DETAIL:  The error string contains (2, 250, 120.50, null, 13). 
# 3. variant: DETAIL:  The error string contains (1, 250, 120.50, null, null).
# 4. variant: django.db.utils.IntegrityError: ERROR: NULL value in "product_id" column of "logistic_stockproduct" relation violates NOT NULL restriction

models.py

class Product(models.Model):
    title = models.CharField(max_length=60, unique=True)
    description = models.TextField(null=True, blank=True)


class Stock(models.Model):
    address = models.CharField(max_length=200, unique=True)
    products = models.ManyToManyField(
        Product,
        through='StockProduct',
        related_name='stocks',
    )


class StockProduct(models.Model):
    stock = models.ForeignKey(
        Stock,
        on_delete=models.CASCADE,
        related_name='positions',
    )
    product = models.ForeignKey(
        Product,
        on_delete=models.CASCADE,
        related_name='positions',
    )
    quantity = models.PositiveIntegerField(default=1)
    price = models.DecimalField(
        max_digits=18,
        decimal_places=2,
        validators=[MinValueValidator(0)],
    )

Мне нужно было добавить поле 'product' в промежуточный сериализатор модели "ProductPositionSerializer"

fields = ('id', 'product', 'quantity', 'price')

class ProductPositionSerializer(serializers.ModelSerializer):
    class Meta:
        model = StockProduct
        fields = ('id', 'product', 'quantity', 'price')

class StockSerializer(serializers.ModelSerializer):
    positions = ProductPositionSerializer(many=True)
    class Meta:
        model = Stock
        fields = ('id', 'address', 'positions')

    def create(self, validated_data):
        positions = validated_data.pop('positions')
        stock = super().create(validated_data)
        for position in positions:
            StockProduct.objects.create(stock=stock, **position)
Вернуться на верх