就是这样。在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表单的标准编辑器中可以正常使用。
答案 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()
,MyModelView
和ModelSerializer
已经完全按照您在覆盖这些方法上的作用
答案 1 :(得分:0)
我错误地重写了序列化程序中的某些方法。删除了这些方法,它开始起作用。