老师您好,我仿照您的例子写了一个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,有一个外键分类, 那么创建文章的时候,同时创建分类,会报你说的这个错误,
创建文章前应该先创建好分类,然后就没有这个问题了
012019-07-10 -
程序员臻叔
提问者
2018-04-07
已经解决了哦,谢谢老师,之前的原因确实是serializer重载create()时有问题,然后我把models层的外键设置为null=False,blank=False就行了,现在能够跑通了。但现在我还是不太明白,业务逻辑一般是在serializer里面做还是views里面做的好,我看到有些人写的代码,在models层还去做业务逻辑判断,现在有点迷茫。。
不知道我这么理解是不是对的:
views :应该是用来写业务逻辑的,然后是接收前端传过来的数据并且调用serializer去序列化数据,然后把数据返回给前端。另外views不能直接操作models
serializers:主要是用来做前端传来的参数进行校验的,然后直接可以操作models
models:只是orm映射,一般不要在此做业务逻辑判断?022018-04-09 -
bobby
2018-04-07
能否截图我看看你的model设计以及你的view的逻辑和你的serializer的代码
00 -
程序员臻叔
提问者
2018-04-05
可能没描述清楚,主要情况就是:我的device表里有ssid和mac两个字段,我的sendrecord表里有device外键和send_status,我想做的是,在post请求sendrecord这个接口的时候,同时把device里面的数据也同步一下,但是就报了上面的错误。但是我在sendrecordViewSet里面,我已经重载了create()方法,可还是不行,另外,我看我serializer里的的所有字段,也没有一个是write_only的,这个怎么解决呢
00
Python前后端分离开发Vue+Django REST framework实战
2872 学习 · 2457 问题
相似问题