Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django rest框架错误对象X没有属性';获得额外的行动';_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django rest框架错误对象X没有属性';获得额外的行动';

Python Django rest框架错误对象X没有属性';获得额外的行动';,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想添加一些搜索功能到我的API,我遵循了,但我仍然得到错误 类型对象“ClientViewSet”没有属性“get\u extra\u actions” 我的设置 版本 Django:2.2.5 Django Rest框架:3.11.0 Python:3.8.2 models.py class Client(models.Model): phone = models.CharField(max_length=10) url.py router = routers.Default

我想添加一些搜索功能到我的API,我遵循了,但我仍然得到错误

类型对象“ClientViewSet”没有属性“get\u extra\u actions”


我的设置 版本

  • Django:2.2.5
  • Django Rest框架:3.11.0
  • Python:3.8.2
models.py

class Client(models.Model):
    phone = models.CharField(max_length=10)
url.py

router = routers.DefaultRouter()
router.register(r'clients', ClientViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
序列化程序.py

class ClientSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Client
        fields = '__all__'
views.py

class ClientViewSet(generics.ListAPIView):
    queryset = Client.objects.all()
    serializer_class = ClientSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['phone']
“您将其称为视图集,但这并不意味着它就是视图集;您继承了APIView,它是一个独立的通用视图,而不是视图集

视图集需要从视图集继承。视图集。“

要构建视图集,
ViewSet
需要从
ViewSet
继承,而
ListAPIView
类不从
ViewSet
继承

但是,实现此功能的一种方法是将继承的类从
ListAPIView
更改为
ModelViewSet
,如下所示:

class ClientViewSet(viewsets.ModelViewSet):
    queryset = Client.objects.all()
    serializer_class = ClientSerializer
    filter_backends = [DjangoFilterBackend]
    filter_fields = ['phone']

是的,它是一个
CharField