gpt4 book ai didi

python - django-filter 上的日期范围

转载 作者:太空狗 更新时间:2023-10-30 01:41:30 24 4
gpt4 key购买 nike

我使用 Django,Django REST 框架加上 django-filters (alex/django-filter)。

我有一个包含字段 start_date 和 end_date 的模型,我正在尝试构建一个日期 api 端点,它应该接收一个日期并响应包含 (start_date < date) 和 (end_date > date) 的项目。有一个 DateRangeFilter但我不知道如何使用它。到目前为止,这是我的代码:

urls.py:

url(r'^api/sales/$', views.SaleItemList.as_view(), name='sales'),

views.py:

class SaleItemFilter(django_filters.FilterSet):
city = django_filters.CharFilter(name='trade_item__vendor__city')
title = django_filters.CharFilter(name='trade_item__title')
date = django_filters.DateRangeFilter()

class Meta:
model = SaleItem
fields = ['sale_price', 'sale_date_start', 'sale_date_end', 'trade_item']

class SaleItemList(generics.ListAPIView):
queryset = SaleItem.objects.all()
serializer_class = SaleItemListSerializer
filter_class = SaleItemFilter

序列化程序.py:

class SaleItemListSerializer(serializers.ModelSerializer):
class Meta:
model = SaleItem
fields = ("sale_price", "sale_date_start", "sale_date_end", "trade_item", "slogan")

我可以过滤到目前为止的确切日期:

/api/sales/?sale_date_start=2015-05-22

最佳答案

我无法谈论你问题中的 Django REST Framework 部分,但我希望我能对 django-filter 部分提供一些见解!

如果您使用 DateRangeFilter,结果将是一个包含“任何日期”、“今天”、“过去 7 天”、“本月”和“今年”选项的下拉列表。

如果您的变量是“日期”,则其中任何一个都会为您提供带有“日期范围”标签的日期范围:

date_range = DateRangeFilter(field_name='date')
date = DateRangeFilter(label='Date_Range')

不同之处在于,如果您使用第一个,您可以再次使用变量“date”,这样您就可以让您的用户选择按开始日期、结束日期或两者(以获取介于两者之间的日期)进行过滤,全部使用相同的日期变量。

(您只能在等号左侧使用“日期”一次(或根本不使用))。

要获取开始和结束日期,请执行以下操作:

start_date = DateFilter(field_name='date',lookup_expr=('lt'),) 
end_date = DateFilter(field_name='date',lookup_expr=('gt'))

您不需要在 Meta 中再次调用“date”,但您可以。你确实需要打电话。它可以是您的日期,或您要过滤的其他一些字段。

这是完整的代码和截图示例:

from django_filters import DateRangeFilter,DateFilter
from wesapp.models import MyModel

class SaleItemFilter(django_filters.FilterSet):
start_date = DateFilter(name='date',lookup_type=('gt'),)
end_date = DateFilter(name='date',lookup_type=('lt'))
date_range = DateRangeFilter(name='date')

class Meta:
model = SaleItem
fields = ['entered_by',]

enter image description here

关于python - django-filter 上的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com