Рассмотрим ответ json от одной из моих конечных точек в веб-приложении django rest Framework.
{
"links": {
"next": null,
"previous": null
},
"count": 2,
"total_pages": 1,
"results": [
{
"movie": {
"id": 13,
"title": "Living Doll",
"genres": [
{
"genre": "Horror"
}
],
"imdbID": "tt0100038",
"poster": "/8VUR5PN3yqRoK9M65BASDrZ4Imd.jpg",
"language": "en",
"favourite": false,
"watch_later": true,
"watched": false
}
},
{
"movie": {
"id": 230,
"title": "Porno",
"genres": [
{
"genre": "Romance"
},
{
"genre": "Comedy"
}
],
"imdbID": "tt0100388",
"poster": "/dNkLerizbd53flidKiippvBTns4.jpg",
"language": "pl",
"favourite": true,
"watch_later": true,
"watched": false
}
}
]
}
См. Избыточный ключ фильма в каждом элементе массива.Как мне удалить их, чтобы сделать это так?
{
"links": {
"next": null,
"previous": null
},
"count": 2,
"total_pages": 1,
"results": [
{
"id": 13,
"title": "Living Doll",
"genres": [
"Horror"
],
"imdbID": "tt0100038",
"poster": "/8VUR5PN3yqRoK9M65BASDrZ4Imd.jpg",
"language": "en",
"favourite": false,
"watch_later": true,
"watched": false
},
{
"id": 230,
"title": "Porno",
"genres": [
"Romance",
"Comedy"
],
"imdbID": "tt0100388",
"poster": "/dNkLerizbd53flidKiippvBTns4.jpg",
"language": "pl",
"favourite": true,
"watch_later": true,
"watched": false
}
]
}
Также смотрите жанры.Они должны быть похожи на второй json без ключей.
Сериализатор ответа jooboo приведен ниже
class MovieSerializer(serializers.ModelSerializer):
genres = serializers.SerializerMethodField()
favourite = serializers.SerializerMethodField()
watch_later = serializers.SerializerMethodField()
watched = serializers.SerializerMethodField()
class Meta:
model = Movie
fields = ('id','title','genres','imdbID','poster','language','favourite','watch_later','watched')
read_only_fields =('title','genres','imdbID' ,'poster','language')
def get_genres(self, obj):
qs = MovieGenre.objects.filter(movie=obj)
return GenreSerializer(qs,many=True).data
def get_favourite(self, obj):
result = UserList.objects.filter(user=self.context.get('request').user,movie=obj)
if result:
return result[0].favourite
return False
def get_watch_later(self, obj):
result = UserList.objects.filter(user=self.context.get('request').user,movie=obj)
if result:
return result[0].watch_later
return False
def get_watched(self, obj):
result = UserList.objects.filter(user=self.context.get('request').user,movie=obj)
if result:
return result[0].watched
return False
Это код вида
class MovieSearchView(generics.ListAPIView):
pagination_class = StandardResultsSetPagination
serializer_class = MovieSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ('title',)
queryset = Movie.objects.all()