Прямое назначение обратной стороне множества «многие ко многим» запрещено.Вместо этого используйте products.set ().Django REST Framework - PullRequest
0 голосов
/ 21 ноября 2018

Я получаю следующую ошибку, когда я размещаю новый продукт с категорией (информация о продукте отформатирована так:)

{
    "product_code": "testcode",
    "name": "testname",
    "quantity": 22,
    "price": 22,
    "categories": [{
        "name": "Test category",
        "products": [],
        "categories": []
}]
}

ошибка

Direct assignment to the reverse side of a many-to-many set is prohibited. Use products.set() instead.

и когда яиспользуйте

product.categories.set(**category)

Я получаю следующую ошибку

set() got an unexpected keyword argument 'name'

Мой файл models.py

from django.db import models

# Create your models here.

class Category(models.Model):
    name = models.CharField(max_length=255)
    categoriesId = models.ForeignKey('self', related_name='categories',on_delete=models.CASCADE, blank=True, null=True)

class Product(models.Model):
    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')

Мой файл serializers.py

from rest_framework import serializers
from products_and_categories.models import Product, Category
from django.db import models


class CategorySerializer(serializers.ModelSerializer):
    def to_representation(self, obj):
        if 'categories' not in self.fields:
            self.fields['categories'] = CategorySerializer(obj, many=True)      
        return super(CategorySerializer, self).to_representation(obj)

    class Meta:
        model = Category
        fields = ("name", 'products', 'categories')

class ProductSerializer(serializers.ModelSerializer):
    categories = CategorySerializer(many=True)
    class Meta:
        model = Product
        fields = ("product_code", "name", "quantity", "price", 'categories')

    def create(self, validated_data):
        category_data = validated_data.pop('categories')
        product = Product.objects.create(**validated_data)
        for category in category_data:
            product.categories.create(**category)
        return product

Есть идеи, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...