【问题标题】:'MovieViewSet' should either include a `serializer_class` attribute, or override the `get_serializer_class()` method'MovieViewSet' 应该包含一个 `serializer_class` 属性,或者覆盖 `get_serializer_class()` 方法
【发布时间】:2021-08-07 20:18:22
【问题描述】:

我正在尝试从 Youtube 教程构建一个项目,但我不断收到此错误:AssertionError: 'MovieViewSet' should either include a `serializer_class` attribute, or override the `get_serializer_class()` method.

这是views.py 文件

class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer

    def list(self, request, *args, **kwargs):
        movies = Movie.objects.all()
        serializer = MovieSerializer(movies, many=True)
        return Response(serializer.data)

这也是serializer.py 文件:

class MovieSerializer(serializers.ModelSerializer):
    class Meta:
        model = Movie
        fields = ('id', 'title', 'desc', 'year')

我做错了什么?因为在我看来,我使用的是serializers_class ...

提前谢谢你!

【问题讨论】:

  • 清理 .pyc 文件并重试。
  • @Sumithran 不起作用。我还删除了迁移和 db.sqlite3
  • 我的意思是__pycache__
  • @Sumithran 是的,我也是这个意思,不起作用...

标签: python django django-rest-framework django-views


【解决方案1】:

试试这个

class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()

    def get_serializer_class(self):
        return MovieSerializer

    def list(self, request, *args, **kwargs):
        movies = Movie.objects.all()
        serializer = MovieSerializer(movies, many=True)
        return Response(serializer.data)

我认为这是一个缓存问题,让我们看看这是否有效。

【讨论】:

  • 我仍然遇到同样的错误,太奇怪了。我只是在学习一个教程:/
  • 你的 urls.py 是什么样的?
  • 我正在使用 drfs default router,在帖子中分享您的网址。
  • 是的,我只需将movies 更改为movie,因为我的urls.py 指向movie 。也许你可以帮助我解决这个问题? stackoverflow.com/questions/67599962/…
猜你喜欢
  • 2017-12-22
  • 2021-03-24
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
相关资源
最近更新 更多