Python DRF:数据库未更新

Python DRF:数据库未更新,python,django,django-rest-framework,Python,Django,Django Rest Framework,以下是我的档案。它只是根据子类别和类别添加产品。一切正常,但数据未保存在数据库中。我不确定我会错在哪里 型号.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

以下是我的档案。它只是根据子类别和类别添加产品。一切正常,但数据未保存在数据库中。我不确定我会错在哪里

型号.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
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)
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
视图.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
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)
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
序列化程序.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
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)
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

add
serializer.save()
当serializer没有实例时,将调用
serializer create
方法。

如果打开django shell,是否能够通过
p=Product.objects.create(name='some\u name'…)
创建
产品
模型并在数据库中查看它?否。我尝试了
f=Product.objects.create(name='Shorts',category='Clothings',subcategor…:y='Female')
,但它给出了
值错误:无法分配“'Clothings'”:“Product.category”必须是“category”实例。
我想这是因为字段类别是外键,但我不知道如何对外键执行此操作。是的,因为这些字段的字段类型是ForeignKey。您需要获取这些模型的实例并在创建调用中使用。签出,我如何执行此操作?类似于:
cat=category.objects.first();sub_cat=SubCategory.obects.first();p=Product.objects.create(name='Shorts',category=cat,SubCategory=sub_cat)
它工作了!但我不明白为什么会发生这种情况。在我使用
instance.save()
之前,为什么不保存它,还有什么区别
serializer.save()
创建的?
serializer.save()
将在
AddProductsSerializer