簡體   English   中英

Django REST 框架 - 使用日期和字符串參數過濾查詢參數

[英]Django REST framework - filtering against query params with date and string parameter

我使用 REST 框架創建了我的“API”,現在嘗試對其進行過濾。 這就是我的 models.py 查找附表 model 的方式。

class Schedule(models.Model):
    bus_company_route = models.ForeignKey(BusCompanyRoute, on_delete=models.PROTECT)
    bus = models.ForeignKey(Bus, on_delete=models.PROTECT)
    travel_date_time = models.DateTimeField()

我想根據查詢參數過濾departuretravel_date_time 基本上場departure來自以下模型。

class BusCompanyRoute(models.Model):
    route = models.ForeignKey(Route, on_delete=models.PROTECT)

並且路線以下列方式與“路線”model 鏈接

class Route(models.Model):
    destination = models.ForeignKey(
        Location,
        on_delete=models.PROTECT,
        related_name='route_destiantion'
    )
    class Meta:
        default_permissions = ()
        verbose_name = 'Route'
        verbose_name_plural = 'Routes'

和位置 model 是

class Location(BaseModel):
    name = models.CharField(
        max_length=50,
        validators=[validate_location_name],
        unique=True,
    )

我基本上將 usecases.py 用於我的邏輯部分,因此在我的 views.py 文件中,我有以下代碼來獲取查詢參數。

class BusCompanyTicketDetailView(generics.ListAPIView, BusCompanyMixin):
    serializer_class = serializers.TicketDetailResponseSerializer

    def get_queryset(self):
        travel_date = (self.request.query_params.get('travel_date'))
        destination = (self.request.query_params.get('destination'))
        return usecases.ListBusCompanyTicketUseCase(
            bus_company=self.get_bus_company(),
            date=travel_date,
            destination=destination
        ).execute()

我的用例文件有以下代碼。

class ListBusCompanyTicketUseCase(BaseUseCase):
    def __init__(self, bus_company: BusCompany, date: datetime, destination):
        self._bus_company = bus_company
        self._date = date
        self._destination = destination

        # print(datetime)

    def execute(self):
        self._factory()
        return self._schedules
    def _factory(self):
        self._schedules = Schedules.objects.filter(bus__bus_company=self._bus_company ,travel_date_time__date=self._date ,bus_company_route__route__destination=self._destination)

最后我的 url 查詢參數如下

http://127.0.0.1:8000/api/v1/ticket/bus-company/1037a4cc-ff38-4948-978a-5a7b92cb7a41/list?travel_date=2021-1-2&destination=florida

我只用 travel_date_time 得到了正確的查詢,但是在添加destiantion時我得到了錯誤

ValidationError at /api/v1/ticket/bus-company/1037a4cc-ff38-4948-978a-5a7b92cb7a41/list
['“florida” is not a valid UUID.']

查詢參數 url 有什么問題或者我的查詢錯誤?

您的Destination model 具有屬性name ,因此在過濾器查詢中添加另一個過濾器條件name

def _factory(self):
        self._schedules = Schedules.objects.filter(bus__bus_company=self._bus_company ,travel_date_time__date=self._date ,bus_company_route__route__destination__name=self._destination)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM