django序列化使用

1 基本使用

1) 先查询出一个图书对象

from booktest.models import BookInfo

book = BookInfo.objects.get(id=2)

 2) 构造序列化器对象

from booktest.serializers import BookInfoSerializer

serializer = BookInfoSerializer(book)

 3)获取序列化数据

通过data属性可以获取序列化后的数据

serializer.data

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

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

 

2 关联对象嵌套序列化

对于关联字段,可以采用以下几种方式:

1) PrimaryKeyRelatedField

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

 指明字段时需要包含read_only=True或者queryset参数:

  • 包含read_only=True参数时,该字段将不能用作反序列化使用
  • 包含queryset参数时,将被用作反序列化时参数校验使用

2) StringRelatedField

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

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

 

3)HyperlinkedRelatedField

此字段将被序列化为获取关联对象数据的接口链接

hbook = serializers.HyperlinkedRelatedField(label='图书', read_only=True, view_name='books-detail')

4)SlugRelatedField

此字段将被序列化为关联对象的指定字段数据

hbook = serializers.SlugRelatedField(label='图书', read_only=True, slug_field='bpub_date')

 slug_field指明使用关联对象的哪个字段

5)使用关联对象的序列化器

hbook = BookInfoSerializer()

6) 重写to_representation方法

序列化器的每个字段实际都是由该字段类型的to_representation方法决定格式的,可以通过重写该方法来决定格式。

注意,to_representations方法不仅局限在控制关联对象格式上,适用于各个序列化器字段类型。

自定义一个新的关联字段:

class BookRelateField(serializers.RelatedField):
    """自定义用于处理图书的字段"""
    def to_representation(self, value):
        return 'Book: %d %s' % (value.id, value.btitle)

指明hbook为BookRelateField类型

hbook = BookRelateField(read_only=True

 

你可能感兴趣的:(DRF,框架)