[英]Django Rest Framework - How to call method model
我需要從模板調用一個方法。 我有以下代碼:
模型.py
class Operation(Base):
...
hash_code = models.UUIDField(default=uuid4)
...
def open_operation(self, user):
...
pass
視圖.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',]
網址.py
path(r'operations/open', views.OperationOpenView.as_view()),
測試.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() 中的 TypeError 缺少 1 個必需的位置參數:'id'”
隧道盡頭有光嗎?
謝謝你們
您需要修復您的網址:
path(r'operations/open/<int:id>/', views.OperationOpenView.as_view()),
在tests.py
:
response = client_api_logged.patch('/api/operations/open/1/', kwargs={'id':1})
patch 方法接受 3 個參數(self、request、id)。 Python(object reference) 提供'self',Django 提供'request',URL 需要提供'id'。 帖子中的 URL 映射不包含“id”,因此 Django 抱怨缺少參數。 來自 Ben 的評論
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.