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中有介绍!

djangorestframework modelserializer 处理关系字段_第1张图片

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。网上有分析可参考。目前我的性能满足,需要关注逻辑关系和简单实现快速开发。

你可能感兴趣的:(后端,django,drf,modelserializer,序列化)