簡體   English   中英

Django Rest Framework - 如何調用方法模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM