【发布时间】:2021-04-21 06:00:38
【问题描述】:
我使用 REST 框架创建了我的“API”,现在尝试对其进行过滤。这就是我的 models.py 查找 BookingStatement 模型的方式。
class BookingStatement(BaseModel):
ticket_number = models.PositiveIntegerField(unique=True)
booking = models.OneToOneField(Booking, on_delete=models.PROTECT)
user_rate = AmountField()
agent_rate = AmountField()
total_amount = AmountField()
class Meta:
default_permissions = ()
def __str__(self):
return str(self.id)
预订是一对一键,因此预订模型具有以下属性。
class Booking(BaseModel):
bus_seat = models.ManyToManyField(Seat)
schedule = models.ForeignKey(Schedule, on_delete=models.PROTECT)
boarding_point = models.ForeignKey(
BoardingPoint,
on_delete=models.PROTECT,
null=True
)
remarks = models.JSONField(null=True, blank=True)
contact = PhoneNumberField(null=True)
booking_date_time = models.DateTimeField(auto_now_add=True)
class Meta:
default_permissions = ()
verbose_name = 'Booking'
verbose_name_plural = 'Bookings'
def __str__(self):
return '{}-{}'.format(self.user, self.customer_name)
我在 views.py 中使用了通用 ListAPIView,如下所示。
class BusCompanyTicketDetailView(generics.ListAPIView, BusCompanyMixin):
serializer_class = serializers.TicketDetailResponseSerializer
def get_queryset(self):
travel_date = (int(self.request.query_params.get('booking_date')))
print(booking_date)
return usecases.ListBusCompanyTicketUseCase(date=#'what should i pass?'#).execute()
我使用 usecases.py 过滤 booking_date_time 的 url,如下所示。
http://127.0.0.1:8000/api/v1/ticket/list?booking_date=2021-1-29
所以我过滤预订时间的用例文件如下。
class ListBusCompanyTicketUseCase(BaseUseCase):
def __init__(self, date:datetime):
self._date = datetime
def execute(self):
self._factory()
return self._booking_statements
def _factory(self):
self._booking_statements = BookingStatement.objects.filter(booking__booking_date_time=?? need to get date from views.)
问题是我不知道如何在我的用例中从 url 获取查询参数以过滤预订日期任何帮助都会非常有帮助。
【问题讨论】:
-
不确定是否理解您的问题,因为您已经通过 self._date 在用例中检索了查询参数预订日期。
标签: python django filter django-queryset