当前位置:   article > 正文

drf-----序列化定义字段的两种方法_serialzer自定义序列化字段

serialzer自定义序列化字段

第一种   借用SerializerMethodField  方法,定义get_字段名  方法

  1. author_list= models.Author.objects.all()
  2. ser=AuthorSerialzer(instance=author_list,many=True)
  3. #定义字段
  4. author_detail=serializers.SerializerMethodField()
  5. def get_author_detail(self,obj):
  6. #obj 是要序列化的对象 就是instance =的值
  7. msg={'email':obj.author_detail.email,"age":obj.author_detail.age}
  8. return msg

 前端展示

  1. {
  2. "code": 104,
  3. "msg": "成功",
  4. "data": [
  5. {
  6. "id": 3,
  7. "author_detail": {
  8. "email": "2494272315@qq.com",
  9. "age": 18
  10. },
  11. "name": "tao",
  12. "phone": 156789
  13. }
  14. ]
  15. }

第二种

序列化类中serializers.py

  1. ### 2.2 定制字段方式2
  2. class BookSerialzier(serializers.Serializer):
  3. name = serializers.CharField()
  4. price = serializers.CharField()
  5. # 1 序列化类中这样写
  6. # 2 到表模型中写一个方法,方法名必须叫 publish_detail,这个方法返回什么,这个字段的value就是什么
  7. publish_detail = serializers.DictField()
  8. author_list=serializers.ListField()
  9. DictField,ListField

 models.py

  1. class Book(models.Model):
  2. name = models.CharField(max_length=32)
  3. price = models.CharField(max_length=32)
  4. publish = models.ForeignKey(to='Publish', on_delete=models.SET_NULL, null=True)
  5. authors = models.ManyToManyField(to='Author')
  6. def sb_name(self):
  7. return self.name + '_sb'
  8. @property
  9. def publish_detail(self):
  10. return {'id': self.publish.pk, 'name': self.publish.name, 'addr': self.publish.addr}
  11. def author_list(self):
  12. l = []
  13. for author in self.authors.all():
  14. l.append({'id': author.pk, 'name': author.name, 'phone': author.phone, 'age': author.author_detail.age})
  15. return l

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/44686
推荐阅读
相关标签
  

闽ICP备14008679号