首页 > 解决方案 > 无法覆盖 drf 嵌套序列化程序 CREATE

问题描述

我正在尝试Product使用邮递员创建一个类的实例,但对我没有任何作用。我试过只添加一个category,还给出一个类别列表category_ids,仍然没有成功。

谁能指出,我做错了什么?我到处搜索,但找不到解决方案。

为什么我会收到这个 keyError?

楷模:

class Category(models.Model):
    name       = models.CharField(max_length=80)    
    
    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.name

class Product(models.Model):
    category = models.ManyToManyField(Category, blank=False)
    name = models.CharField(max_length=100)
    description = models.TextField(max_length=250)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    quantity = models.IntegerField(default=0)

    class Meta:
        ordering = ("name", )

    def __str__(self):
        return self.name

序列化器:

class ProductSerializer(serializers.ModelSerializer):
    category = CategorySerializer(many=True, required=False)  
    category_ids = serializers.PrimaryKeyRelatedField(source='category', many=True, queryset=Category.objects.all())

    class Meta:
        model = Product
        fields = (
            "id", "name", "category_ids", "category", "description", "price", 
            "quantity"
        )
    def create(self, validated_data):
        categories = validated_data.pop('category')
        product = Product.objects.create(**validated_data)
        Category.objects.create(product=product, **categories)
        return product

意见:

class ProductView(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    queryset = Product.objects.all()

    def perform_create(self, serializer):
        serializer.save(created_by = self.request.user)

    def perform_update(self, serializer):
        serializer.save(updated_by = self.request.user)

    def perform_destroy(self, instance):
        instance.deleted_by = self.request.user 
        instance.deleted_at = timezone.now()
        instance.save()

错误:

Exception Type: KeyError
Exception Value: 'category'

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


推荐阅读