不允许DRF Django Rest框架重新设置路径查询参数“方法”“获取”

2024-10-04 03:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用url.py文件中的re_path方法获取泛型RetrieveAPIView类。在尝试了几个组合之后,我只能让path方法工作。我想得到一个类似于/file?id={some_uid}的端点

到目前为止,我有以下几点:

  • django:3.0.6
  • djangorestframework=3.11.0

视图。py:

class UploadFileInfoView(generics.RetrieveAPIView):
    lookup_field = "id"
    queryset = Upload.objects.all()
    serializer_class = UploadModelSerializer

url.py:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path("file/", views.UploadFileView.as_view(), name="UploadFile"),
    # this works
    # path("file/<uuid:id>", views.UploadFileInfoView.as_view(), name="UploadFileInfo"), 
    # this does not
    re_path(r"^file/(?P<id>[0-9A-Fa-f-]+)", views.UploadFileInfoView.as_view(), name="UploadFileInfo"),
]

没有像文档中说的那样使用url方法

This function is an alias to django.urls.re_path(). It’s likely to be deprecated in a future release.


Tags: pathdjango方法namepyreviewid
1条回答
网友
1楼 · 发布于 2024-10-04 03:24:57

据我所知,默认情况下,查询参数被传递给django视图。因此,您不需要在URL中显式地处理它。在您的情况下,如果需要/file?id={some_uid},应该在视图中处理它或覆盖get_queryset方法

url.py

urlpatterns = [
# ** your other urls **
    path(r"file", views.UploadFileInfoView.as_view(), name="UploadFileInfo"),
]

views.py

class UploadFileInfoView(generics.ListAPIView):
    lookup_field = "id"
    queryset = Upload.objects.all()
    serializer_class = UploadModelSerializer

    def get_queryset(self):
        return Upload.objects.get(id=self.request.GET.get('id'))

上述设置将用于/file/?id=1234并返回Upload.objects.get(id=1234)。我还没有测试过这段代码,但它应该可以工作,如果对象不存在,您还需要处理异常

相关问题 更多 >