采用自定义模型字段代替序列化器嵌套的使用来返回我们想要的数据

需求

导航栏中,我们有父导航和嵌套的子导航,我们在序列化器中使用了序列化器嵌套来获取子导航,所以出现了子导航显示数据没有经过过滤全部输出的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']

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

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

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

原文地址:https://www.cnblogs.com/weiweivip666/p/13854414.html