赞
踩
第一种 借用SerializerMethodField 方法,定义get_字段名 方法
-
-
-
- author_list= models.Author.objects.all()
- ser=AuthorSerialzer(instance=author_list,many=True)
-
-
- #定义字段
- author_detail=serializers.SerializerMethodField()
- def get_author_detail(self,obj):
- #obj 是要序列化的对象 就是instance =的值
- msg={'email':obj.author_detail.email,"age":obj.author_detail.age}
- return msg
- {
- "code": 104,
- "msg": "成功",
- "data": [
- {
- "id": 3,
- "author_detail": {
- "email": "2494272315@qq.com",
- "age": 18
- },
- "name": "tao",
- "phone": 156789
- }
- ]
- }
- ### 2.2 定制字段方式2
- class BookSerialzier(serializers.Serializer):
- name = serializers.CharField()
- price = serializers.CharField()
- # 1 序列化类中这样写
- # 2 到表模型中写一个方法,方法名必须叫 publish_detail,这个方法返回什么,这个字段的value就是什么
- publish_detail = serializers.DictField()
-
- author_list=serializers.ListField()
-
-
- DictField,ListField
- class Book(models.Model):
- name = models.CharField(max_length=32)
- price = models.CharField(max_length=32)
- publish = models.ForeignKey(to='Publish', on_delete=models.SET_NULL, null=True)
- authors = models.ManyToManyField(to='Author')
-
- def sb_name(self):
- return self.name + '_sb'
-
- @property
- def publish_detail(self):
- return {'id': self.publish.pk, 'name': self.publish.name, 'addr': self.publish.addr}
-
- def author_list(self):
- l = []
- for author in self.authors.all():
- l.append({'id': author.pk, 'name': author.name, 'phone': author.phone, 'age': author.author_detail.age})
- return l

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。