2017-02-16 9 views
1

Я собираюсь создать собственный URL-адрес в вложенном сериализаторе. Это мой serializer.py ->Django Rest Framework Пользовательский URL-адрес в Nested Serializer

class SerieSerializer(serializers.HyperlinkedModelSerializer): 
created_by = serializers.ReadOnlyField(source='created_by.username') 
picture = serializers.ImageField() 

class Meta: 
    model = Serie 
    fields = ('url', 'name', 'genre', 'director', 'release', 'seasons', 'review', 'picture', 'actors', 'created_by') 

и это результат:

[ 
{ 
    "url": "http://localhost:8000/series/1/", 
    "name": "Mr. Robot", 
    "genre": "DRAMA", 
    "director": "Sam Esmail", 
    "release": "2015-06-24", 
    "seasons": 2, 
    "review": "Mr. Robot es una serie de televisión estadounidense creada por Sam Esmail. Se estrenó el 24 de junio de 2015 en la cadena USA Network. El mismo día la serie se renovó para una segunda temporada, estrenada el 13 de julio de 2016. El 16 de agosto del mismo año Mr. Robot fue renovado para una tercera temporada a estrenarse en 2017.", 
    "picture": "http://res.cloudinary.com/dqohbm9y4/image/upload/v1487190362/uasfb8maqzh9urp4bvrd.png", 
    "actors": [ 
     "http://localhost:8000/actors/3/", 
     "http://localhost:8000/actors/4/" 
    ], 
    "created_by": "mosthated" 
} 
] 

Но мне нужно что-то вроде этого, в "Актеры":

[ 
{ 
    "url": "http://localhost:8000/series/1/", 
    "name": "Mr. Robot", 
    "genre": "DRAMA", 
    "director": "Sam Esmail", 
    "release": "2015-06-24", 
    "seasons": 2, 
    "review": "Mr. Robot es una serie de televisión estadounidense creada por Sam Esmail. Se estrenó el 24 de junio de 2015 en la cadena USA Network. El mismo día la serie se renovó para una segunda temporada, estrenada el 13 de julio de 2016. El 16 de agosto del mismo año Mr. Robot fue renovado para una tercera temporada a estrenarse en 2017.", 
    "picture": "http://res.cloudinary.com/dqohbm9y4/image/upload/v1487190362/uasfb8maqzh9urp4bvrd.png", 
    "actors": [ 
     "Rami Malek": "http://localhost:8000/actors/3/", 
     "Christian Slater": "http://localhost:8000/actors/4/" 
    ], 
    "created_by": "mosthated" 
} 
] 

мне нужно это, например, для отправки профиля для вызова: перейдите в профиль «Rami Malek» с вашим именем в виде URL-адреса или отобразите его и отобразите URL-адрес с помощью вашего первичного ключа.

Если вы можете мне помочь, большое спасибо.

ответ

1

Создайте customActorSerializer, как показано ниже, и свяжите его с SerieSerializer.

class ActorSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Actor 
     fields = ('url','actor_name') 

class SerieSerializer(serializers.HyperlinkedModelSerializer): 
    created_by = serializers.ReadOnlyField(source='created_by.username') 
    picture = serializers.ImageField() 
    actors = ActorSerializer(many=True) 

    class Meta: 
     model = Serie 
     fields = ('url', 'name', 'genre', 'director', 'release', 'seasons', 'review', 'picture', 'actors', 'created_by') 

надеюсь, что это сработает.

+1

Да, это работает! Огромное спасибо!!!!! –