zoukankan      html  css  js  c++  java
  • 采用自定义模型字段代替序列化器嵌套的使用来返回我们想要的数据

    需求

    导航栏中,我们有父导航和嵌套的子导航,我们在序列化器中使用了序列化器嵌套来获取子导航,所以出现了子导航显示数据没有经过过滤全部输出的bug问题。解决方案有2种

    1.重写Serializer序列化器基础类的to_representation方法,通过instance模型对象进行过滤。
    2.采用自定义模型字段代替序列化器嵌套的使用
    

    自定义序列化器嵌套的使用

    在模型类中定义你要返回的类型
    class Nav(BaseModel):
          ....
          class Meta:
                ...
          def __str__(self):
                return self.name
          @property
          def son_list(self):
                """子导航"""
                ret = self.son.filter(is_show=True, is_deleted=False).order_by('orders', 'id') # 得到每个对象
                data = []
                for nav in ret: # 循环quertset集合
                      data.append({
                            'name': nav.name,
                            'icon': nav.icon,
                            'link': nav.link,
                            'is_http': nav.is_http,
                })
                return data              
    

    序列化器中直接使用这个函数名即可

    class NavModelSerializer(serializer.ModelSerializer):
          """导航序列化器"""
          class Meta:
                model = Nav
                fields = ['name', 'icon', 'link', 'is_http', 'son_list']
    

    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    adb
    Android 入门第一课 一个简单的提示框
    JAVA基础入门
    Android环境配置
    Redis_基本类型介绍和指令___3
    Redis_基本类型介绍和指令___2
    Redis_基本类型介绍和指令___1
    Rediss_基本介绍
    int 指令
    关于学习汇编的一些规则的理解(div mul cf of)
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13854414.html
Copyright © 2011-2022 走看看