以下是我的文件。它只是在添加基于子类别和类别的产品。一切工作正常,但数据未保存在数据库中。我不确定我要去哪里错。

models.py

from django.db import models

class Category(models.Model):
    category = models.CharField(max_length=200)
    parent = models.ForeignKey('self', blank=True, null=True, related_name='children')

    class Meta:
        unique_together = ('parent' , 'category')

    def __str__(self):
        return self.category

class SubCategory(models.Model):
    subcategory = models.CharField(max_length=200)
    category = models.ForeignKey('Category', null=True, blank=True)
    parent = models.ForeignKey('self', blank=True, null=True, related_name='subchilren')

    class Meta:
        unique_together = ('parent' , 'subcategory')

    def __str__(self):
        return self.subcategory

class Product(models.Model):
    name = models.CharField(max_length=200)
    category = models.ForeignKey('Category', null=True, blank=True)
    subcategory = models.ForeignKey('SubCategory', null=True, blank=True)

    def __str__(self):
        return self.name


views.py

class AddProducts(APIView):
    serializer_class = AddProductsSerializer
    def post(self, request, format=None):
        data = request.data
        serializer = AddProductsSerializer(data=data)
        if serializer.is_valid(raise_exception=True):
            new_data = serializer.data
            return Response(new_data)
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)


serializers.py

class AddProductsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('id', 'name', 'category', 'subcategory')

        def create(self, validated_data):
            return Product.objects.create(**validated_data)

        def update(self, instance, validated_data):
            instance.name =  validated_data.get('name', instance.name)
            instance.category = validated_data.get('category', instance.category)
            instance.subcategory = validated_data.get('subcategory', instance.subcategory)
            instance.save()
            return instance

最佳答案

    if serializer.is_valid(raise_exception=True):
        serializer.save()
        new_data = serializer.data
        return Response(new_data)


当序列化器没有实例时,添加serializer.save()将调用serializer create方法。

10-04 21:02
查看更多