重写了 ModelViewSet 的 get_queryset 方法遇到了一些问题

因为需求我重写了ModelViewSet的get_queryset方法,针对数据的get请求 达到了业务的需求,但是在调用此API接口的patch方法的时候,就发生了错误。
错误点在于:我重写的get_queryset改变了返回的数据(增加了个人和企业的筛选条件),但是在调用patch的时候,个人用户要去修改的那条数据,在个人筛选的时候并没有找到,所以就导致了patch数据的,未找到错误。
我在不改变反回筛选数据的前提下将list调用的get_queryset方法换了个名,即我重写的get_queryset改了个名,从而跟原本的不冲突,但是这样让我多写了大量的重复代码 ,有没有什么更好的解决方法。
需求大概是:一个数据列表需要做个人和企业的筛选,个人只能获取自己的数据,管理能获取所有人的数据,个人新建的数据需要审批之后才归属个人,但是在新建的时候前端有需要用到patch方法,因为新建的数据不属于个人,在筛选时筛选不出来 所以patch失败。

讨论数量: 3

有点没搞懂,能再详细一些么。就是说一个API服务,个人只能看到属于自己的数据,管理员能看到所有的数据,个人创建的新数据需要经过管理员的审核才属于个人,然后这个patch更新是用户手动更新信息么?

4年前 评论

不好意思 最近有点忙 没来得及及时回复, 需求就像你说的 需要通过后端返回给前端用户能看到的数据,而不是前端直接通过url加过滤,那样参数都暴露出来了。
就是我重写get_queryset的时候吧当前功能实现了。但是别的功能实现不了。可能是我自身设计的表的问题,我给你稍微讲一下吧。
我们有个客户表 这个表中有个字段responsible_member(负责人) 通过这个字段来判断用户有没有归属,没有归属的客户 所有用户都可以申请,就是没有归属的客户所有人都能看到,但是我又在客户这个api加了返回数据的限制,在个人客户列表这个限制是好使的 但是到了所有未归属的客户列表 这个限制就让用户没办法申请这个客户了。因为返回的限制 让他获取不到这个客户。
这么一说我好像知道怎么实现了。或许我可以做一个客户列表的Base通过访问不同的路由来解决这个问题。

4年前 评论
rainbowzyk 4年前

写成两个接口也是可以的,不管是以继承基类的方式还是重复代码的方式,最好的方案就是在返回数据前,能通过一定手段直接在 get_queryset 函数里搞定。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!