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']
    

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

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

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

  • 相关阅读:
    [css]display: table-cell,用div做分列布局
    [css]《CSS知多少》
    关于安装Android Studio的一些问题的解决方法
    枚举
    揭开计算机的神秘面纱
    Android模拟器访问本地Web应用
    Android开发中常用的Eclipse快捷键
    详解Windows平台搭建Androiod开发环境
    Web 应用的安全性
    坚持才能成功------王健林
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13854414.html
Copyright © 2011-2022 走看看