DRF:数据库未更新

时间:2017-10-31 20:11:57

标签: python django django-rest-framework

以下是我的档案。它只是根据子类别和类别添加产品。一切正常,但数据没有保存在数据库中。我不知道我哪里出错了。

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

1 个答案:

答案 0 :(得分:2)

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

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