如何使用retrieveapiview在Django REST框架中基于特定字段检索数据?

发布于 2025-01-31 03:04:17 字数 485 浏览 3 评论 0原文

有了以下代码,我能够根据ID检索数据,如何更新此代码,以便可以基于文件名检索数据?

我的网址是

urlpatterns = [
    path("items/<pk>", SingleUploadItem.as_view()),
]

我的观点是:

class SingleUploadItem(RetrieveAPIView):

    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

我的模型是

class fileUpload(models.Model):
    fileName = models.CharField(max_length=200, unique=True, blank=True)

With the code below, I am able to retrieve data based on id, how can I update this code so I can retrieve data based on fileName instead?

My urls is

urlpatterns = [
    path("items/<pk>", SingleUploadItem.as_view()),
]

My views is:

class SingleUploadItem(RetrieveAPIView):

    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

My model is

class fileUpload(models.Model):
    fileName = models.CharField(max_length=200, unique=True, blank=True)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

面犯桃花 2025-02-07 03:04:17

首先,在urls.py

urlpatterns = [
    path("items/<str:file_name>", SingleUploadItem.as_view()),
]

和views.py中

from rest_framework import status
from .models import fileUpload
from .serializers import FileUploadSerializer

class SingleUploadItem(RetrieveAPIView):

    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

    def get(self, request, file_name):
        try:
            fileupload_obj = fileUpload.objects.get(fileName = file_name)
            return Response(FileUploadSerializer(fileupload_obj).data)
        except fileUpload.DoesNotExist:
            return Response(status = status.HTTP_400_BAD_REQUEST)

First, in urls.py

urlpatterns = [
    path("items/<str:file_name>", SingleUploadItem.as_view()),
]

And in views.py,

from rest_framework import status
from .models import fileUpload
from .serializers import FileUploadSerializer

class SingleUploadItem(RetrieveAPIView):

    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer

    def get(self, request, file_name):
        try:
            fileupload_obj = fileUpload.objects.get(fileName = file_name)
            return Response(FileUploadSerializer(fileupload_obj).data)
        except fileUpload.DoesNotExist:
            return Response(status = status.HTTP_400_BAD_REQUEST)
橘和柠 2025-02-07 03:04:17

是一个古老的帖子,但对于那些将来降落的人来说,无需手动做到这一点。 DRF检索方法将基于Lookup_field属性查找对象。默认情况下,这将其设置为“ PK”,但您可以将其设置为您在视图上想要的任何内容。对于此示例,将是:

urlpatterns = [
    path("items/<str:file_name>", SingleUploadItem.as_view()),
]

视为

class SingleUploadItem(RetrieveAPIView):
    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer
    lookup_field = 'file_name'

Is an old post but for those landing here in future, there is no need to manually do the get. DRF retrieve method will lookup the object based on the lookup_field attribute. By default this is set to 'pk' but you can set this to whatever you want on your view. For this example it would be:

urlpatterns = [
    path("items/<str:file_name>", SingleUploadItem.as_view()),
]

View as

class SingleUploadItem(RetrieveAPIView):
    queryset = fileUpload.objects.all()
    serializer_class = fileUploadSerializer
    lookup_field = 'file_name'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文