向客户端传递 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_representation
和 to_internal_value
的实现应该会给你提示。您可以在这里阅读更多内容:
如果提取用作 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_representation
和 to_internal_value
的实现应该会给你提示。您可以在这里阅读更多内容: