#django #django-rest-framework #django-serializer
Вопрос:
Если вы извлекете значение поля, используемого в качестве поля PrimaryKeyRelatedField, вы увидите значение в виде объекта, а не PK.
В случае официального документа я использую его, как показано ниже, но это сбивает с толку при использовании его с клиентом.
Я не знаю, будут ли дорожки содержать идентификатор или объект, просто взглянув на имя поля.
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 ...]
Есть ли лучший способ?
Ответ №1:
tracks
in tracks = validated_data.pop('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
должна дать вам подсказки. Вы можете прочитать больше здесь: