老师您好,我仿照您的例子写了一个demo,但是报了如下的错,一般下面这个错误应该用什么思路去解决?

来源:10-5 订单管理接口-2

程序员臻叔

2018-04-05

AssertionError at /api/sendrecord/ The `.create()` method does not support writable nested fields by default. Write an explicit `.create()` method for serializer `device_operation.serializers.CreatSendRecordSerializer`, or set `read_only=True` on nested serializer fields.


写回答

4回答

yikogd

2019-07-10

我也遇到这个问题,原因是因为:

如文章model,有一个外键分类, 那么创建文章的时候,同时创建分类,会报你说的这个错误,

创建文章前应该先创建好分类,然后就没有这个问题了

0
1
程序员臻叔
其实可以用drf-writable-nested这个库解决问题
2019-07-10
共1条回复

程序员臻叔

提问者

2018-04-07

已经解决了哦,谢谢老师,之前的原因确实是serializer重载create()时有问题,然后我把models层的外键设置为null=False,blank=False就行了,现在能够跑通了。但现在我还是不太明白,业务逻辑一般是在serializer里面做还是views里面做的好,我看到有些人写的代码,在models层还去做业务逻辑判断,现在有点迷茫。。

不知道我这么理解是不是对的:
views :应该是用来写业务逻辑的,然后是接收前端传过来的数据并且调用serializer去序列化数据,然后把数据返回给前端。另外views不能直接操作models
serializers:主要是用来做前端传来的参数进行校验的,然后直接可以操作models
models:只是orm映射,一般不要在此做业务逻辑判断?


0
2
程序员臻叔
多谢bobby老师解答!明白了
2018-04-09
共2条回复

bobby

2018-04-07

能否截图我看看你的model设计以及你的view的逻辑和你的serializer的代码

0
0

程序员臻叔

提问者

2018-04-05

可能没描述清楚,主要情况就是:我的device表里有ssid和mac两个字段,我的sendrecord表里有device外键和send_status,我想做的是,在post请求sendrecord这个接口的时候,同时把device里面的数据也同步一下,但是就报了上面的错误。但是我在sendrecordViewSet里面,我已经重载了create()方法,可还是不行,另外,我看我serializer里的的所有字段,也没有一个是write_only的,这个怎么解决呢

0
0

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2872 学习 · 2457 问题

查看课程