djangorestframework modelserializer 处理关系字段

djangorestframework modelserializer 处理关系字段

0.技术体系

        django4.2 + djangorestframework + vue3 + element-plus + uWSGI(部署) + 宝塔

1.关系

        一对一、多对一、多对多

2.drf modelserializer对关系字段的处理

        modelserializer默认处理关系字段为PrimaryKeyRelatedField,默认是id-pk。

        多对一:直接写入id

        多对多:写入id-list [id1, id2]

3.具体细节

        [1] read_only设置serializer字段后,只能序列化;反序列化输入只保存在initial_data,不进入validated_data中

        [2] modelserializer中底层可以处理validated_data中的多对多关系,但是read_only设置后,validated_data不包含多对多关系;因此再重写save,再单独处理多对多关系

        [3] drf modelserialzier中处理多对多关系,首先处理非多对多关系,然后save,再处理多对多关系。如样例代码!

        instance.set是底层自动调用django orm执行,写入多对多第三张表!对应的还有add、remove、clear。这个在Django官网QuerySet中有介绍!

4.痛悟

        由于自己直接采用DRF,对于django的model了解的很少,本质是对queryset的很多函数不懂,导致不知道django orm很多操作。

        因此,有不懂的操作,drf查不到的,大概率是在django官网能查到。另外这个wiki也可以学到不少!

        DRF教程网上有本书:Django REST framework API 指南 (自行搜索即可)

        着重看Django4.2官网,DRF官网和参考资料书,基本上满足;然后需要思考如何设计逻辑关系表,这是重要的!

5.其它

        目前大多数需求,基于django同步即可满足,现在django4.2 orm有异步接口(底层操作数据库还是同步的!),view和middware都支持异步了,既然有了异步,那么肯定对性能有所提升,但是预计达不到fastapi的异步的水平!

        对于10人以内团队,django+DRF+vue3+uWSGI满足需求了,不用刻意追求async异步,真要异步可以考虑fastapi。因此,目前我的实现都是同步实现的。满足

        对于复杂逻辑关系的系统,推荐适用django(包含jwt、filter、drf、cors等库),若追求性能,可使用fastapi。网上有分析可参考。目前我的性能满足,需要关注逻辑关系和简单实现快速开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值