나는 Django REST Framework를 사용하고 있으며 이것에 대해 상당히 초보자입니다.
값이 아닌 JSON 출력의 manytomanyfield 및 foreignkey 필드에 대한 문자열 표현을 원합니다.
models.py
class Movie(models.Model):
"""Movie objects"""
name = models.CharField(max_length=128)
directorName = models.ForeignKey(Director)
genre = models.ManyToManyField(Genre)
serializers.py
class MovieSerializer(serializers.ModelSerializer):
"""
Serialiazing all the Movies.
"""
genre = serializers.PrimaryKeyRelatedField(many=True, queryset=Genre.objects.all())
directorName = serializers.PrimaryKeyRelatedField(queryset=Director.objects.all())
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Movie
fields = ('popularity',"directorName",'genre','imdbScore','name','owner')
JSON 출력
{"popularity":"90.0","directorName":1,"genre":[1,2,3],"imdbScore":"8.9","name":"Titanic"}
directorName과 장르의 display_name 대신 값만 가져옵니다.
이 문제를 해결하는 방법을 알려주세요.
EDIT [SOLVED] pk를 반환하므로 PrimaryKeyRelatedField의 to_representation () 메서드를 재정의해야합니다.
그렇게하려면 오버라이드 (override) 할 필요가 to_representation()
방법 PrimaryKeyRelatedField
가 반환로를 pk
.
MyPrimaryKeyRelatedField
상속 된를 PrimaryKeyRelatedField
만든 다음 해당 to_representation()
메서드 를 재정의 할 수 있습니다 .
반환 value.pk
되는 대신 PrimaryKeyRelatedField
지금 문자열 표현을 반환합니다. six.text_type()
대신 str()
Python 2 (유니 코드) 및 Python 3 (str) 버전을 처리 하는 대신 사용 했습니다 .
from django.utils import six
from rest_framework import serializers
class MyPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def to_representation(self, value):
return six.text_type(value) # returns the string(Python3)/ unicode(Python2) representation now instead of pk
그러면 serializers.py
다음과 같이 표시됩니다.
class MovieSerializer(serializers.ModelSerializer):
"""
Serialiazing all the Movies.
"""
genre = MyPrimaryKeyRelatedField(many=True, queryset=Genre.objects.all())
directorName = MyPrimaryKeyRelatedField(queryset=Director.objects.all())
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Movie
fields = ('popularity',"directorName",'genre','imdbScore','name','owner')
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다