向客户端传递 PrimaryKeyRelatedField 时感到困惑

Confused when delivering PrimaryKeyRelatedField to the Client

如果提取用作 PrimaryKeyRelatedField 的字段的值,您将看到对象形式的值,而不是 PK。

以官方文档为例,我是按下面的方式使用的,但是在客户端使用的时候比较混乱。

仅通过查看字段名称,我不知道曲目是否包含 id 或 Object。

class AlbumSerializer(serializers.ModelSerializer):
    tracks = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ['tracks']
    
        def create(self, validated_data):
                tracks = validated_data.pop('tracks')  # [Track, Track ...]

有没有更好的方法?

tracks = validated_data.pop('tracks') 中的

tracks 将包含 Track 对象,因为您是从 validated_data 获取它的,它使用 to_internal_value 反过来又为您提供了模型实例对象。

您可以在此处查看 PrimaryKeyRelatedField 的实施:

https://github.com/encode/django-rest-framework/blob/master/rest_framework/relations.py#L243

to_representationto_internal_value 的实现应该会给你提示。您可以在这里阅读更多内容:

https://www.django-rest-framework.org/api-guide/serializers/#overriding-serialization-and-deserialization-behavior