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

我假设标题中的错误,为了清楚起见再次在这里

'CityListViewSet' should either include a `serializer_class` attribute, 
or override the `get_serializer_class()` method.

我的序列化程序没有连接到我的视图,这在我的代码中应该是。我不确定这个错误在哪里。不知道大家有没有见过类似的?

这里是代码。

路由器:

router.register(r'city-list', CityListViewSet, base_name='city-list')

查看:

class CityListViewSet(viewsets.ReadOnlyModelViewSet):                 
    queryset = Venue.objects.values('city').distinct()
    serializer = CitySerializer(queryset, many=True)
    ordering_fields = ('city',)
    ordering = ('city',)

序列化器:

class CitySerializer(serializers.ModelSerializer):    
    class Meta:
        model = City
        fields =('city',)

什么会导致这样的断言错误,而代码似乎连接正确?

【问题讨论】:

    标签: python django-rest-framework assertion django-rest-viewsets


    【解决方案1】:

    异常说明了它本身。您需要一个 serializer_class 属性。你有serializer

    【讨论】:

    • 大声笑,我证实了你刚才在文档中所说的话。好的,我的错,谢谢
    • 这带来了一个新问题,'ListSerializer' object is not callable目前正在研究它
    • 有趣。你确定有关系吗?因为您没有在代码示例中的任何地方使用 ListSerializer。
    • 我的 CityListViewSet 继承自 viewsets.ReadOnlyModelViewSet 我想知道这是否是原因
    • 对于像我这样的菜鸟,这意味着在你的CityListViewSet,添加serializer-class = CitySerializer
    【解决方案2】:

    当我在视图中声明 post 方法并尝试发送未序列化的 post 数据时出现此错误,如果您正在执行来自 javascript 的请求,我使用 JSON.stringify() 解决了它

    【讨论】:

      【解决方案3】:

      错误说你定义了一个序列化器属性,你需要用写作来纠正 代码中的 serializer_class 属性,

      serializer_class = yourCreatedSerializer
      

      【讨论】:

        【解决方案4】:
        serializer = CitySerializer(queryset, many=True) 
        

        上面的行应该替换为

        serializer_class = CitySerializer(queryset, many=True)
        

        【讨论】:

          【解决方案5】:

          您在这里使用了不同的模型名称:

          查看:

          class CityListViewSet(viewsets.ReadOnlyModelViewSet):     #(viewsets.ModelViewSet)             
          queryset = City.objects.values('city').distinct()
          serializer = CitySerializer(queryset, many=True)
          ordering_fields = ('city',)
          ordering = ('city',)
          

          import -> from .serializers import TaskSerializers,CitySerializer

          序列化器:

          class CitySerializer(serializers.ModelSerializer):    
          class Meta:
              model = City
              fields =('city',)
          

          【讨论】:

            【解决方案6】:

            你必须覆盖刚刚添加的用户

            from django.contrib.auth.models import User
            from rest_framework.permissions import IsAdminUser
            

            在 createViewList 中

            permission_classes = [IsAdminUser]
            

            【讨论】:

              猜你喜欢
              • 2021-03-24
              • 2021-08-07
              • 1970-01-01
              • 2019-10-29
              • 1970-01-01
              • 2017-04-04
              • 1970-01-01
              • 1970-01-01
              • 2010-09-27
              相关资源
              最近更新 更多