【问题标题】:Django Rest Framework does not output filtered QuerysetsDjango Rest Framework 不输出过滤的查询集
【发布时间】:2019-03-20 11:23:57
【问题描述】:

我正在使用 DRF 视图集来搜索名称,但只搜索部分文本。问题是我使用get_queryset 使用icontains 从数据库中过滤数据:

class CustomerViewSet(viewsets.ModelViewSet):
    serializer_class = serializers.CustomerSerializer
    permission_classes = [IsAuthenticated]
    lookup_field = 'full_name'

    def get_queryset(self):

        if self.kwargs:
            return models.Customer.objects.filter(full_name__icontains=self.kwargs['full_name'])
        else:
            return models.Customer.objects.all()

视图向我发送了404 error,但是当我在终端中打印它时,它会显示现有数据。

【问题讨论】:

  • 您是否调试并确认您的if self.kwargs 语句是正确的,并且查询集实际上返回了您所期望的?
  • 是的,我做到了,即使是空的也是如此(我已经解决了这个问题)。问题是视图没有序列化模型,但是当我将它转储到终端时,它会显示数据。
  • 您的序列化程序会以某种方式丢失数据吗?而且,嗯,你肯定访问了正确的 URL 对吧?
  • urls.py 是什么样的?您执行的请求是什么样的?
  • 添加您的 urls.py 内容和您呼叫的实际 URL 将有助于其他人更好地了解您的问题。

标签: django django-rest-framework


【解决方案1】:

api/views.py

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter

class SearchViewSet(viewsets.ModelViewSet):
    queryset = models.Customer.objects.all()
    serializer_class = serializers.CustomerSerializer
    permission_classes = [IsAuthenticated]
    filter_backends = [SearchFilter]
    search_fields = ['full_name']

网址

  • /api/customers/<pk> 其中 pk 是 Customer 的唯一 ID
  • /api/customers/?search=<full_name> 其中full_name 是搜索查询

所以,我可以从id 检索数据并按其名称搜索客户。但是如果我们想在其他字段中查找信息,例如search_fields = ['full_name', 'address'],我们可以将字段添加到search_fields/api/customers/?search=some address 也会在 address 字段中搜索。

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2016-08-13
    • 2018-07-28
    • 2021-09-21
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2021-04-23
    相关资源
    最近更新 更多