[英]Django REST framework - filtering against query param with date Outside Views.py file
我使用 REST 框架創建了我的“API”,現在嘗試對其進行過濾。 這就是我的 models.py 查找 BookingStatement model 的方式。
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)
預訂是一對一鍵,因此預訂 model 具有以下屬性。
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 獲取查詢參數以過濾預訂日期,任何幫助都會非常有幫助。
您應該使用django-filter
來實現對視圖集的過濾。 這是你必須積累的一些知識,但是一旦你理解了它,你就可以用它做很多復雜的過濾邏輯。 從長遠來看,嘗試自己實現過濾系統總是更加困難。 作為起點,請查看官方文檔: https://www.django-rest-framework.org/api-guide/filtering/ 。 對於過濾器,請查看有關 DRF 集成的文檔: https://django-filter.readthedocs.io/en/stable/guide/rest_framework.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.