python “CityListViewSet”应包含"serializer_class“特性,或重写”get_serializer_class()“方法

ztyzrc3y  于 2023-02-11  发布在  Python
关注(0)|答案(8)|浏览(203)

我假设标题中的错误,在此再次澄清

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

是什么导致了这样一个Assert错误,而代码似乎连接正确?

iugsix8n

iugsix8n1#

异常本身就说明了这一点。你需要一个serializer_class属性。你已经有了serializer

qltillow

qltillow2#

将此代码段添加到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',)
ecbunoof

ecbunoof3#

我得到了这个错误时,声明后方法在视图中,并试图发送后数据没有序列化,如果你是做的请求从javascript我解决了它使用JSON.stringify()

emeijp43

emeijp434#

一个错误指出您定义了一个serializer属性,您需要通过在代码中写入serializer_class属性进行更正,

serializer_class = yourCreatedSerializer
mznpcxlj

mznpcxlj5#

serializer = CitySerializer(queryset, many=True)

以上行应替换为

serializer_class = CitySerializer(queryset, many=True)
jxct1oxe

jxct1oxe6#

此处使用了不同的型号名称:
查看:

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

导入-〉从序列化程序导入TaskSerializer、CitySerializer
串行器:

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

qybjjes17#

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

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

和创建视图列表中

permission_classes = [IsAdminUser]
bhmjp9jg

bhmjp9jg8#

将其重命名为

serializer = CitySerializer(queryset, many=True)

这个

serializer_class = yourCreatedSerializer

你的任务完成了

相关问题