2015-08-12 3 views
0

Нужна помощь с сериализатором рамки для отдыха django для ManyToMany Field.Сериализаторы в каркасе отдыха django

Модель

class Genre(models.Model): 
    genre = models.CharField(max_length=255) 

    def __unicode__(self): 
     return u'%s' % (self.genre) 


class Movie(models.Model): 
    popularity = models.FloatField() 
    director = models.CharField(max_length=255) 
    imdb_score = models.FloatField() 
    name = models.CharField(max_length=255) 
    genre = models.ManyToManyField(Genre) 

    def __unicode__(self): 
     return u'%s' % (self.name) 

Serializer

class MovieSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Movie 
     fields = ('popularity', 'director', 'genre', 'imdb_score', 'name') 
     depth = 1 

Посмотреть

class MovieList(APIView): 

    def get(self, request, format=None): 
     movies = Movie.objects.all() 
     serializer = MovieSerializer(movies, many=True) 
      return Response(serializer.data) 

Результат API с использованием СПР ove serializer ниже,

{ 
    "popularity":83.0, 
    "director":"Victor Fleming", 
    "genre":[ 
    {"id":1,"genre":"Adventure"}, 
    {"id":2,"genre":"Family"}, 
    {"id":3,"genre":"Fantasy"}, 
    {"id":4,"genre":"Musical"} 
    ], 
    "imdb_score":8.3, 
    "name":"The Wizard of Oz" 
} 

Как я могу исключить идентификатор и жанр, чтобы результат был как показано ниже.

{ 
    "99popularity": 83.0, 
    "director": "Victor Fleming", 
    "genre": [ 
     "Adventure", 
     " Family", 
     " Fantasy", 
     " Musical" 
    ], 
    "imdb_score": 8.3, 
    "name": "The Wizard of Oz" 
    } 

ответ

2

То, что вы, скорее всего, нужно сделать, это использовать StringRelatedField для жанра поле на вашем MovieSerializer. Например:

class MovieSerializer(serializers.ModelSerializer): 
    genre = serializers.StringRelatedField(many=True) 

    class Meta: 
     model = Movie 
     fields = ('popularity', 'director', 'genre', 'imdb_score', 'name') 
     depth = 1 
+0

Привет, это работает, но когда я делаю запрос на запись, чтобы добавить новые данные, я получаю сообщение об ошибке 'StringRelatedField.to_internal_value() должен быть implemented', знаете ли вы об этом? – g4ur4v

+1

Вы хотите ознакомиться с документацией [пользовательские реляционные поля] (http://www.django-rest-framework.org/api-guide/relations/#custom-relational-fields). –

Смежные вопросы