Python Django rest框架返回创建的201,但数据库中没有任何更改

Python Django rest框架返回创建的201,但数据库中没有任何更改,python,django-rest-framework,Python,Django Rest Framework,就这样。django控制台中没有错误,报告创建了对象,对django rest的请求返回MyModel实例的json,所有字段(包括id)都设置为null,即使我传递了一些非空字段。并且新项目不会出现在数据库中 代码如下: class MyModelSerializer(rfs.ModelSerializer): class Meta: model = MyModel fields = ['id', 'foo', 'bar'] def creat

就这样。django控制台中没有错误,报告创建了对象,对django rest的请求返回MyModel实例的json,所有字段(包括
id
)都设置为
null
,即使我传递了一些非空字段。并且新项目不会出现在数据库中

代码如下:

class MyModelSerializer(rfs.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['id', 'foo', 'bar']

    def create(self, validated_data):
        return MyModel(**validated_data)

class MyModelView(mixins.CreateModelMixin,
                  generics.GenericAPIView):
    permission_classes = [permissions.IsAdminUser]
    serializer_class = MyModelSerializer
    queryset = MyModel.objects.all()
    # TBH that seems strange to me, but tutorial suggest showing

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

url(r'^api/web/my-model/$',
    MyModelView.as_view(),
    name='my-model')

MyModel
未附加,但它可以与基于django表单的标准编辑器一起工作。

我错误地覆盖了序列化程序中的某些方法。删除了这些方法并开始工作。

问题在于
MyModelSerializer
的方法
create()
。仅调用
MyModel(**validated_data)
不会将数据放入数据库,只会创建
MyModel
的实例。要将数据保存到数据库中,必须调用
instance.save()
MyModel.objects.create(**validated\u data)
。序列化程序应如下所示:

class MyModelSerializer(rfs.ModelSerializer):

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

在您的情况下,我认为不需要覆盖
MyModelSerializer
create()
方法(也可以是
MyModelView
post()
方法)
ModelSerializer
CreateModelMixin
GenericAPIView
已经完成了覆盖这些方法所做的工作

实际上,它也可以在不覆盖该方法的情况下工作。