我正在通过传递参数在 DRF API 中创建删除方法,但我不知道如何正确传递 orientdb @rid。
我在 orientdb 中有一个名为“worksat”的关系,在 OrientDB Studio 中,我可以看到结构名称如#:的@rid ,即:“#33:1”是 workat 关系记录的@rid。
所以我需要在我的 DRF URL api 关系中传递该字符串:
http://127.0.0.1:8000/api/oworksat/
但是像这样传递:
http://127.0.0.1:8000/api/oworksat/#33:1
我看到 GET 请求,消息如下(我希望看到 DELETE):
Allow: GET, POST, HEAD, OPTIONS
如果传递一个简单的数字:
http://127.0.0.1:8000/api/oworksat/1
然后我看到 DELETE 请求(显然“1”不存在):
HTTP 404 Not Found
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
api.py:
class OWorksAtViewSet(viewsets.ModelViewSet):
queryset = graph.oworksat.query()
serializer_class = OWorksAtSerializer
permission_classes = [
permissions.AllowAny
]
def destroy(self, request, *args, **kwargs):
print ("destroy")
import pdb;pdb.set_trace()
网址.py:
from django.conf.urls import include, url
from rest_framework import routers
from .api import (OWorksAtViewSet)
from rest_framework_swagger.views import get_swagger_view
router = routers.DefaultRouter()
router.register('api/oworksat', OWorksAtViewSet, 'oworksat')
schema_view = get_swagger_view(title='Swagger Documentation')
urlpatterns = [
url(r'^swagger/$', schema_view)
]
urlpatterns += router.urls
有趣的是,通过从 swagger api 访问,在 DELETE 方法中,如果我传入请求“#33:1”的 ID,它会起作用,api 调用我的 destroy 方法并在 kwargs: 中接收kwargs = {'pk': '#33:1'}
。
我怎样才能从 DRF api 达到这种行为?
编辑: 这是我实现销毁方法的临时解决方案,但显然这只适用于 Swagger UI,通过在请求中传递 @rid。
from rest_framework import status
from rest_framework.response import Response
from core.pyorient_client import *
class OFriendsViewSet(viewsets.ModelViewSet):
def destroy(self, request, *args, **kwargs):
client = orientdbConnection()
client.command("delete edge ofriends where @rid = '" + kwargs['pk'] + "'")
return Response(status=status.HTTP_204_NO_CONTENT)