[英]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()
我想根據查詢參數過濾departure
和travel_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.