Ошибка сериализаторов "многие ко многим" в post api

У меня есть отношения "многие-ко-многим" между Movie и Person через Cast. Я использую CastSerializer для создания метода post для создания нового фильма и нового отношения cast, но когда вызываю метод post, ответ возвращает AttributeError. Я хочу, чтобы тело сообщения выглядело следующим образом:

{
  ...
  "title": "string",
  "genres": [
    0
  ],
  "cast": [
    {
      "charactor": "string",
      "cast": 0,
      "order": 2147483647
    }
  ]
}
AttributeError at /movie/
Got AttributeError when attempting to get a value for field `cast` on serializer `MoviesSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Movie` instance.
Original exception text was: 'Movie' object has no attribute 'person'.

это модели:

class Movie(models.Model):
    ...
    cast = models.ManyToManyField(Person,related_name='cast_movies', through="Cast")
    
    def __str__(self):
        return self.title
    
class Cast(models.Model):
    id = models.AutoField(primary_key=True,null=False,blank=False)
    movie = models.ForeignKey(Movie,on_delete=models.CASCADE,related_name='casts')
    cast = models.ForeignKey(Person,on_delete=models.CASCADE,related_name='person')
    charactor = models.CharField(max_length=200,null=True,blank=True,default='')
    order = models.IntegerField(null=True)
    
    def __str__(self):
        return self.cast.name + " ("+ self.movie.title + ")"

сериализаторы:

class CastSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cast
        fields = ['charactor','cast','order']    
    
class MoviesSerializer(serializers.ModelSerializer):
    genres = serializers.SlugRelatedField(
        many=True, queryset=Genre.objects.all(),slug_field='id'
    )
    cast = CastSerializer(many = True)
    class Meta:
        model = Movie
        fields = [ ...,'cast']
        
    def create(self, validated_data):
        genres_data = validated_data.pop('genres', []) 
        
        cast_data = validated_data.pop('cast', []) 
        movie = Movie.objects.create(**validated_data)
        for cast in cast_data:
            Cast.objects.create(movie_id = movie.id,**cast)
        genresInstances = []
        for genre in genres_data:
            genresInstances.append(genre)
        
        movie.genres.set(genresInstances)
        return movie
Вернуться на верх