3

manytomanydjango で関係を取得しようとしていますが、次のエラーが発生しています -

nameシリアライザー GenreSerializerでフィールドの値を取得しようとすると、AttributeError が発生しました。serializer フィールドの名前が正しくない可能性があり、 Movie インスタンスのどの属性またはキーとも一致しません。元の例外テキストは次のとおりでした: 'Movie' オブジェクトには属性 'name' がありません。

設定を推奨する同様の回答がここにありますが、many=True機能しません- フィールドの値を取得しようとすると属性エラーが発生します

models.py

class Genre(models.Model):
  name = models.CharField(max_length=255,unique=True)

  def __unicode__(self):
    return self.name

class Movie(models.Model):
  mname = models.CharField(max_length=255)
  genres = models.ManyToManyField(Genre,related_name='movies')

  def __unicode__(self):
    return self.mname

serializers.py

class GenreSerializer(serializers.ModelSerializer):
  class Meta:
    model = Genre
    fields = ('name','id')

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

  class Meta:
    model = Movie
    fields = ('id','genres','mname')

urls.py

urlpatterns = [
url(r'^genres/$', views.GenreList.as_view()),
url(r'^genres/(?P<pk>[0-9]+)$', views.GenreDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

ビュー.py

class GenreList(generics.ListCreateAPIView):
  queryset = Genre.objects.all()
  serializer_class = GenreSerializer


class GenreDetail(generics.RetrieveUpdateDestroyAPIView):
  serializer_class = GenreSerializer

  def get_queryset(self):
    genres = Genre.objects.get(pk=self.kwargs.get('pk', None))
    movies = Movie.objects.filter(genres=genres)
    return movies
4

3 に答える 3

5

他の質問と同様に、ビューで間違ったシリアライザーを使用していますGenreDetail。返すモデルのタイプのシリアライザーを追加する必要がありますget_queryset

class GenreDetail(generics.RetrieveUpdateDestroyAPIView):
    serializer_class = MovieSerializer

    def get_queryset(self):
        genres = Genre.objects.get(pk=self.kwargs.get('pk', None))
        movies = Movie.objects.filter(genres=genres)
        return movies
于 2015-12-23T22:07:09.070 に答える