Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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框架-如何调用方法模型_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架-如何调用方法模型

Python Django Rest框架-如何调用方法模型,python,django,django-rest-framework,Python,Django,Django Rest Framework,我需要从模板中调用一个方法。我有以下代码: models.py views.py class OperationOpenView(APIView): """ patch: """ filter_backends = (filters.DjangoFilterBackend,) filter_class = OperationOpenFilter def patch(self, request, id): user = request.user

我需要从模板中调用一个方法。我有以下代码:

models.py

views.py

class OperationOpenView(APIView):
"""
patch:
"""

    filter_backends = (filters.DjangoFilterBackend,)
    filter_class = OperationOpenFilter

    def patch(self, request, id):
        user = request.user
        operation = Operation.objects.get(pk=id)
        serializer = OperationOpenSerializer(operation, 
                     data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            serializer.instance.open_operation(user)
            return Response(data={'operation': operation, 'user': user}, status=status.HTTP_200_OK)
        else:
            return Response(code=400, status=status.HTTP_400_BAD_REQUEST)
序列化程序.py

class OperationOpenSerializer(serializers.ModelSerializer):
    class Meta:
        model = Operation
        fields = ('id', )
        depth = 1
过滤器.py

class OperationOpenFilter(filters.FilterSet):

id = filters.NumberFilter(
    label='id',
    required=True,
    help_text='ID'
)

class Meta:
    model = Operation
    fields = ['id',]
url.py

path(r'operations/open', views.OperationOpenView.as_view()),
tests.py

@pytest.mark.django_db
def test_view(client_api_logged):
    response = client_api_logged.patch('/api/operations/open', kwargs= 
    {'id': '1'})
    assert response.status_code == 200
我没有让它工作,而是得到了错误:

“在/api/operations/open处出现类型错误 patch()缺少1个必需的位置参数:“id”

隧道尽头有灯光吗


谢谢大家

您需要修复您的url:

path(r'operations/open/<int:id>/', views.OperationOpenView.as_view()),
说明:
补丁方法采用3个参数(self、request、id)。Python(对象引用)提供“self”,Django提供“request”,URL需要提供“id”。帖子中的URL映射没有包含“id”,因此Django抱怨缺少参数。从Ben的评论来看,这是一个小的扩展:patch方法采用3个参数(self、request、id)。Python提供“self”,Django提供“request”,URL需要提供“id”。帖子中的URL映射没有包含“id”,因此Django抱怨缺少参数。@Ben,谢谢。我在对答案进行解释。
path(r'operations/open/<int:id>/', views.OperationOpenView.as_view()),
response = client_api_logged.patch('/api/operations/open/1/', kwargs={'id':1})