关系字段
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)
中间人的多对多
默认是只读的