Django вложенных сериализаторов «многие ко многим» - PullRequest
0 голосов
/ 18 апреля 2020

Вот что я пытаюсь решить

if genre exit:
   find the PK that matches the "type" field
   link the result(s) with Movie class
else:
   create the "type" or type(s) inside of Genre class
   "link" the key(s) with Movie Class

Жанр сериализатора

class GenreSerializer(serializers.ModelSerializer):

    class Meta:
        model = Genre
        fields = ('type',)

Mov ie Сериализатор

class MovieSerializer(serializers.ModelSerializer):
    genres = GenreSerializer(many=True)

    class Meta:
        model = Movie
        fields = (
            'id', 'name', 'description', 'imdb_score', 'popularity', 'director', 'genres'
        )

   def create(self, validated_data):
        genre_type = validated_data.pop('genres')
        movie = Movie.objects.create(**validated_data)
        for each_type in genre_type:
            g = Genre.objects.get_or_create(**each_type)[0]
            print(g.pk)
            movie.genres.add(g)
        return movie

С помощью приведенного выше кода я могу создать новый mov ie с жанрами, но не могу создать новый mov ie с существующими жанрами.

Вход

{
        "name": "Movie3",
        "description": "Content",
        "imdb_score": 9.5,
        "popularity": 98.0,
        "director": "George Miller",
        "genres": [
            {"type":"Genre2"}
        ]
}

Выход

{
    "genres": [
        {
            "type": [
                "Genre with this type already exists."
            ]
        }
    ]
}
...