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

时间:2018-12-26 15:25:15

标签: python django-rest-framework

就是这样。在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表单的标准编辑器中可以正常使用。

2 个答案:

答案 0 :(得分:1)

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

class MyModelSerializer(rfs.ModelSerializer):

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

就您而言,我认为不需要覆盖create()的{​​{1}}方法(也覆盖MyModelSerializer的{​​{1}}方法)。 post()MyModelViewModelSerializer已经完全按照您在覆盖这些方法上的作用

答案 1 :(得分:0)

我错误地重写了序列化程序中的某些方法。删除了这些方法,它开始起作用。