首页 > 解决方案 > 类型错误:delete() 缺少 1 个必需的位置参数:'pk' django

问题描述

我在我的 django 应用程序中有一个视图,如下所示

class DeployedContractsList(APIView):    
    def get_Contract(self, address):
        contracts = DeployedContracts.objects.all()
        if address:
            contracts = contracts.filter(
                Q(deployed_contract_address__iexact=address)
            )
        return contracts

    def get(self, request, email, format=None):
        service_providers = self.get_queryset(email)
        serializer = DeployedContractsSerializer(service_providers, many=True)
        return Response(data=serializer.data)


    def delete(self, request, pk, format=None):
        item = self.get_Contract(address=pk)
        item.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

我已经通过以下方式配置了我的应用程序网址

    router = DefaultRouter()

    urlpatterns = [
        url(r'^(?P<email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.DeployedContractsList.as_view()),
        url(r'^(?P<pk>)/$', views.DeployedContractsList.as_view()),
        url(r'^', views.DeployedContractsList.as_view())
   ]

和项目的 urls.py 我有以下配置

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^deployedcontracts', include('deployedcontracts.urls')),
]

但是在提出删除请求时,http://127.0.0.1:8000/deployedcontracts/0xe9114368611e9f20cf46b76aa33319fc0ce0b585/我收到以下错误

在此处输入图像描述

尽管我已经在请求 url 中附加了 pk,即 0xe9114368611e9f20cf46b76aa33319fc0ce0b585,因为它可以在我的 url 中看到。任何帮助表示赞赏。

标签: pythondjangodjango-rest-frameworkdjango-views

解决方案


您忘记将正则表达式添加到 url 模式:

url(r'^(?P<pk>[\w-]+)/$', views.DeployedContractsList.as_view()),

推荐阅读