Python Django rest框架返回创建的201,但数据库中没有任何更改
就这样。django控制台中没有错误,报告创建了对象,对django rest的请求返回MyModel实例的json,所有字段(包括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
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
已经完成了覆盖这些方法所做的工作实际上,它也可以在不覆盖该方法的情况下工作。