簡體   English   中英

Django REST 框架 - 使用日期外部 Views.py 文件過濾查詢參數

[英]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.

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