Serializer Relations

2021-03-02  本文已影响0人  xncode

关系字段

StringRelatedField

使用目标的str方法来代表关系,需要参数many

tracks = serializers.StringRelatedField(many=True)

'tracks': [
    '1: Sunflower',
    '2: Whitetail',
    '3: Dinosaur Act',
    ...
]

PrimaryKeyRelatedField

需要参数queryset many allow_null pk_field

tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

'tracks': [
    89,
    90,
    91,
    ...
]

HyperLinkRelatedField

SlugRelatedField

HyperlinkedIdentifyField

嵌套关系

使用序列化器作为字段

tracks = TrackSerializer(many=True, read_only=True)

'tracks': [
    {'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
    {'order': 2, 'title': 'What More Can I Say', 'duration': 264},
    {'order': 3, 'title': 'Encore', 'duration': 159},
    ...
],

默认是只读的,如果想用写操作,需要创建create update

自定义关系字段

实现to_representation,该方法接收一个参数通常为model,实现to_internal_value,实现读写
如果想要动态的queryset(基于context),可以重载get_queryset而不是修改queryset

queryset参数只对可写的字段有意义,用于model实例的查询,从用户的原始输入映射到model实例上

逆向关系

注意 逆向关系不会自动被包含,需要使用fields来指定 (例如track_set)

中间人的多对多

默认是只读的

上一篇下一篇

猜你喜欢

热点阅读