【问题标题】:Django rest framework error object X has no attribute 'get_extra_actions'Django rest框架错误对象X没有属性'get_extra_actions'
【发布时间】:2020-07-03 01:52:19
【问题描述】:

我想在我的 API 中添加一些搜索功能,我关注了this simple guide,但我仍然收到错误

类型对象“ClientViewSet”没有属性“get_extra_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)

urls.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']

【问题讨论】:

  • 是的,这是CharField

标签: python django django-rest-framework


【解决方案1】:

要构建 the answer provided here,ViewSet 需要继承自 ViewSet,而 ListAPIView 类不继承自 ViewSet。

然而,让这个工作的一种方法是将继承的类从 ListAPIView 更改为 ModelViewSet,如下所示:

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

【讨论】:

    【解决方案2】:

    “你称它为视图集,但这并不意味着它是一个;你继承自 APIView,它是一个独立的通用视图,而不是视图集。

    视图集需要从viewsets.ViewSet 继承。”

    https://stackoverflow.com/a/49721133/8932675

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 2017-06-17
      • 2018-03-30
      • 2017-08-11
      • 2016-06-30
      • 2021-04-28
      • 2015-07-14
      相关资源
      最近更新 更多