"CityListViewSet" 应该包含一个 "serializer_class" 属性,或者重写 "get_serializer_class()" 方法。

20

我假设标题出现错误,这里再次阐明一下。


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

我的序列化器没有连接到我的视图,在我的代码中应该连接。我不确定这个 bug 在哪里。我想知道你们是否见过类似的情况?

以下是代码:

路由器:

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',)

是什么原因导致代码看起来正确却出现断言错误?

8个回答

18

异常信息已经给出提示:你需要一个serializer_class属性,而你却使用了serializer


1
哈哈,我在文档中确认了你刚才说的。好的,你是对的,我的错,谢谢。 - user6781560
这带来了一个新问题,即“'ListSerializer'对象不可调用”,目前正在研究它。 - user6781560
有趣。你确定这是相关的吗?因为你在代码示例中没有使用ListSerializer。 - Cory Madden
这很奇怪。我要看看能找到什么。 - user6781560
1
对于像我这样的新手,它意味着在你的CityListViewSet中添加serializer-class = CitySerializer - Darpan
显示剩余2条评论

4
将以下代码片段添加到您的views.py文件中。
class CityListViewSet(viewsets.ReadOnlyModelViewSet):  # (viewsets.ModelViewSet) 
    serializer_class = CitySerializer
            
    queryset = City.objects.values('city').distinct()
    serializer = CitySerializer(queryset, many=True)
    ordering_fields = ('city',)
    ordering = ('city',)

2
错误提示说您定义了一个serializer属性,您需要在代码中改正并写入serializer_class属性。
serializer_class = yourCreatedSerializer

2
serializer = CitySerializer(queryset, many=True) 

以上行应替换为

serializer_class = CitySerializer(queryset, many=True)

1

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

视图:

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

导入 -> from .serializers import TaskSerializers, CitySerializer

序列化器:

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

1
在视图中声明POST方法并尝试发送未序列化的POST数据时,我遇到了这个错误。如果您是从JavaScript发出请求,可以使用JSON.stringify()解决它。

0

你必须重写用户只需添加

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

并且在createViewList中

permission_classes = [IsAdminUser]

0

将此重命名为

    serializer = CitySerializer(queryset, many=True)

这个

    serializer_class = yourCreatedSerializer

你的工作已经完成


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接