Ошибка при вставке сериализатора в раздел необработанных данных, Django REST Framework - PullRequest
0 голосов
/ 01 декабря 2018

Ниже показан продукт (с идентификатором 65), содержащий две категории (с идентификатором 1 и идентификатором 66), ошибка в том, что я не добавил категорию идентификатора 1 при создании продукта. Я добавил только категорию идентификатора.66 (в разделе «Сырые данные»), поэтому каждый раз, когда я добавляю новый продукт с категорией внутри, категория с идентификатором 1 автоматически добавляется в список категорий.Вот в чем ошибка!

{
    "id": 65,
    "product_code": "kdhjkfh",
    "name": "klfjkj",
    "quantity": 12,
    "price": 12,
    "categories": [
        {
            "id": 1,
            "name": "ksjdf",
            "products": [
                65
            ],
            "categories": [
                4
            ]
        },
        {
            "id": 66,
            "name": "dkllj",
            "products": [
                65
            ],
            "categories": []
        }
    ]
}

часть продукта serializers.py

class ProductSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True, required=False)

    class Meta:
        model = Product
        fields = ('id', "product_code", "name", "quantity", "price", 'categories')

    def create(self, validated_data):
        category_data = validated_data.pop('categories')
        product = Product.objects.create(**validated_data)
        dicti={}
        for items in category_data:
            for key, value in items.items() :
                dicti[key] = value
        if 'id' in dicti:
            x= product.categories.get_or_create(id = dicti['id'])
            product.categories.set(x)
        return product

Кто-нибудь знает, почему категория id 1 добавляется автоматически?

РЕДАКТИРОВАНИЕ

Почтовая модель

class Product(models.Model):
    id = models.PositiveIntegerField(primary_key=True)
    product_code = models.CharField(max_length=255)
    name = models.CharField(max_length=255)
    price = models.IntegerField()
    quantity = models.IntegerField()
    categories = models.ManyToManyField(Category, related_name='products',blank=True)

    def __str__(self):
        return self.name

Данные продукта, введенные в раздел необработанных данных перед выполнением запроса POST

{
    "id": 65,
    "product_code": "kdhjkfh",
    "name": "klfjkj",
    "quantity": 12,
    "price": 12,
    "categories": [
        {
            "id": 66,
            "name": "dkllj",
            "products": [
                65
            ],
            "categories": []
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...