序列化的使用

第一部分:基本查询

1.查询一个图书对象

2.构造序列化对象

3.获取序列化数据

4.如果要被序列化的是包含多条数据的查询集QuerySet,可以通过添加many=True参数补充说明

books = BookInfo.objects.all()
serializer = BookInfoSerializer(books, many=True)
serializer.data

# [OrderedDict([('id', 3), ('name', '笑傲江湖'), ('pub_date', '1995-12-24'), ('readcount', 28), ('commentcount', 18), ('is_delete', False), ('image', None)]), OrderedDict([('id', 4), ('name', '雪山飞狐'), ('pub_date', '1987-11-11'), ('readcount', 58), ('commentcount', 24), ('is_delete', False), ('image', None)]), OrderedDict([('id', 5), ('name', '新射雕英雄传'), ('pub_date', '2000-05-01'), ('readcount', 0), ('commentcount', 0), ('is_delete', False), ('image', None)]), OrderedDict([('id', 7), ('name', 'python入门'), ('pub_date', '2018-05-12'), ('readcount', 0), ('commentcount', 0), ('is_delete', False), ('image', None)]), OrderedDict([('id', 9), ('name', 'python运维'), ('pub_date', '2018-05-12'), ('readcount', 0), ('commentcount', 0), ('is_delete', False), ('image', 'book/1.png')])]

第二部分:关联对象嵌套序列化

1.创建人物的序列化器
2.在视图中创建序列化对象并获取数据

3.通过peopleinfo获取book的值,共有6中方式:

PrimaryKeyRelatedField

此字段将被序列化为关联对象的主键。

    book = serializers.PrimaryKeyRelatedField(label='图书',read_only=True)
    或者
    book = serializers.PrimaryKeyRelatedField(label='图书',queryset=BookInfo.objects.all())

指明字段时需要包含read_only=True或者queryset参数
            read_only=True
            queryset=BookInfo.objects.all()(或者)
                将关联的书籍信息全部返回,自己会进行关联
        获取结果:

>>> from book.models import PeopleInfo
>>> from book.serializers import PeopleInfoSerializer
>>> person = PeopleInfo.objects.get(id=10)
>>> serializer = PeopleInfoSerializer(instance=person)
>>> serializer.data
{'id': 10, 'book': 3, 'description': '独孤九剑', 'gender': 1, 'name': '令狐冲'}

StringRelatedField

此字段将被序列化为关联对象的字符串表示方式(即__str__方法的返回值)

book = serializers.StringRelatedField(label='图书')

使用效果:

>>> from book.models import PeopleInfo
>>> from book.serializers import PeopleInfoSerializer
>>> person = PeopleInfo.objects.get(id=10)
>>> serializer = PeopleInfoSerializer(instance=person)
>>> serializer.data
{'description': '独孤九剑', 'name': '令狐冲', 'gender': 1, 'book': '笑傲江湖', 'id': 10}

使用关联对象的序列化器

book = BookInfoSerializer()

使用效果:

>>> from book.models import PeopleInfo
>>> from book.serializers import PeopleInfoSerializer
>>> person = PeopleInfo.objects.get(id=10)
>>> serializer = PeopleInfoSerializer(instance=person)
>>> serializer.data
{'book': OrderedDict([('id', 3), ('name', '笑傲江湖'), ('pub_date', '1995-12-24'), ('readcount', 28), ('commentcount',  ('image', None)]), 'gender': 1, 'name': '令狐冲', 'description': '独孤九剑', 'id': 10}

猜你喜欢

转载自blog.csdn.net/wpb74521wrf/article/details/81217307
今日推荐