Python Django Rest框架-如何调用方法模型
我需要从模板中调用一个方法。我有以下代码: models.py views.pyPython 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
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})