0
ムービーをムービーモデルに追加すると同時にGenreモデルにジャンルを追加しようとしていますが、まだ存在しないGenreエントリを追加しようとすると、次のレスポンスオブジェクトが表示されます。それは)すでにテーブルに存在する: django rest framework 1回のリクエストで複数のテーブルのエントリを追加する方法は?
{'genres': ['Object with genre=Mystery does not exist.']}
は、私はそれがMovieSerializerのcreate()メソッドでobject.get_or_create()を使用して動作するはずと思ったが、動作するようには思えません。
はまた、私は形式でPOSTリクエストでデータを送信しています:
{'tmdb_id': 14,
'title': 'some movie',
'release_date': '2011-12-12',
'genres': ['Action', 'Mystery']}
ことが重要かどうかわかりません。
ここでは、コードです:
Views.py
class CreateMovieView(generics.ListCreateAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
def perform_create(self, serializer):
"""Save the post data when creating a new movie."""
serializer.save()
class MovieDetailsView(generics.RetrieveUpdateDestroyAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
Models.py
class Genre(models.Model):
genre = models.CharField(max_length=65)
def __str__(self):
return "{}".format(self.genre)
class Movie(models.Model):
tmdb_id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=255)
release_date = models.DateField()
imdb_id = models.CharField(max_length=255, blank=True)
img_path = models.CharField(max_length=255, blank=True)
runtime = models.CharField(max_length=65, blank=True)
synopsis = models.TextField(blank=True)
imdb_rating = models.DecimalField(max_digits=3, decimal_places=1, blank=True, null=True)
metascore = models.IntegerField(blank=True, null=True)
genres = models.ManyToManyField(Genre, related_name='genres', blank=True)
def __str__(self):
return "{}".format(self.title)
serializers.py
は、
私が今実現していますModelViewSet、私はまだ同じ応答を得ています。私は今、問題は、データが正しくシリアル化されていないと考えています。私はそれをテストしようとし、それはMovieSerializerが適切にジャンルの入れ子オブジェクトをシリアル化しないようだ。直列化しようとすると '' str 'オブジェクトに' genre 'という属性がないというエラーが発生します。 –
は、ModelSerializer.to_internal_data()メソッドをオーバーライドして、ジャンルを取得または作成し、新しいジャンルIDをデータに入れます。 SlugRelatedFieldがどのように機能するかを正確に把握してください。 –