DRF:django rest框架在详细信息视图中不区分大小写的查找

问题描述

如何通过传递某些参数使网址不区分大小写

例如,假设“股票”模型具有股票代码。下面的所有链接都应该找到相同的代码内容,现在它们区分大小写并尝试搜索不同的值:

  • / stocks / AAPL
  • / stocks / aapl
  • / stocks / AaPl

views.py

rs.status()

urls.py

class StockViewSet(viewsets.ModelViewSet):
    queryset = Stock.objects.all()
    serializer_class = StockSerializer
    lookup_field = "ticker"

    @action(detail=True,methods=["get"],url_path="is",url_name="is")
    def get_income_statement(self,request,*args,**kwargs):
        is_qs = IncomeStatement.objects.filter(ticker=self.get_object())
        serializer = IncomeStatementSerializer(is_qs,many=True)
        return Response(serializer.data)

    @action(detail=True,url_path="bs",url_name="bs")
    def get_balance_sheet(self,requests,**kwargs):
        bs_qs = BalanceSheet.objects.filter(ticker=self.get_object())
        serializer = BalanceSheetSerializer(bs_qs,url_path="cf",url_name="cf")
    def get_cashflows_statement(self,**kwargs):
        cf_qs = Cashflowsstatement.objects.filter(self.get_object())
        serializer = CashflowsstatementSerializer(cf_qs,many=True)
        return Response(serializer.data)


class IncomeStatementDetail(viewsets.ModelViewSet):
    queryset = IncomeStatement.objects.all()
    serializer_field = IncomeStatementSerializer


class BalanceSheetDetail(viewsets.ModelViewSet):
    queryset = BalanceSheet.objects.all()
    serializer_field = BalanceSheetSerializer


class CashflowsstatementDetail(viewsets.ModelViewSet):
    queryset = Cashflowsstatement.objects.all()
    serializer_field = CashflowsstatementSerializer

models.py


router = DefaultRouter()
router.register(r"stocks",views.StockViewSet)
urlpatterns = router.urls

解决方法

使用 lookup_url_kwarg lookup_field 作为

from rest_framework import viewsets


class StockViewSet(viewsets.ModelViewSet):
    lookup_url_kwarg = 'ticker'
    lookup_field = 'ticker__iexact'
    # rest of your code

您可以参考source code of get_object(self),以查看DRF如何在详细视图中获取 模型对象

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...