Django Rest 框架:发出 Http POST 请求时出现“create( )”NotImplementedError

问题描述 投票:0回答:6

在 Django 中发出发布请求时,我收到“create()”尚未实现的错误,而实际上我确实在序列化程序文件中实现了它

from rest_framework import serializers
from people.models import People

class PeopleSerializer(serializers.Serializer):
    pk = serializers.IntegerField(read_only=True)
    name = serializers.CharField(max_length=200)
    favoriteCity = serializers.CharField(max_length=200)

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

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

显然创建方法已经实现,我不明白为什么我会收到NotImplementedError

django http django-rest-framework
6个回答
43
投票

在您的序列化器类中,继承自 ModelSerializer 而不是 Serializer 类,因为后者不会隐式调用 create() 方法。

class PeopleSerializer(serializers.ModelSerializer): 

上述更改将完成您的工作!


3
投票

请检查您的缩进,“创建”函数应该位于该 Serializer 类内,如下例所示。

class StudentSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=111)
    roll = serializers.IntegerField()
    city = serializers.CharField(max_length=722)

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

0
投票

哥们,我面临着同样的问题,你能指导一下你如何解决这个错误吗


-1
投票

当您尝试使用模型序列化器创建特定模型的对象时,检查数据内的键是否与模型属性完全匹配


-1
投票

请检查您的缩进,“创建”函数应该位于该序列化器类中希望它能够工作。


-1
投票

从rest_framework导入序列化器 从.models导入学生

类 StudentSerializer(serializers.Serializer): 名称=序列化器.CharField(max_length=555) def create(self,validated_data): 返回 Student.objects.create(**validated_data)enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.