django - Django:根据未来 1 周和 2 周内的到期日期过滤数据
问题描述
我有一个模型类:
class Products(models.Model):
product = models.Charfield( field specs here . )
expiration_date = modelsDateTimeField ( . field specs here . )
现在我希望用户能够看到从今天起将在 1 周或/和 1 个月或/和 3 个月内到期的所有产品。
我已经尝试过:
from django_filters import rest_framework as filters
expiration_date_after = filters.DateFilter(field_name='expiration_date', lookup_expr='gte')
expiration_date_before = filters.DateFilter(field_name='expiration_date', lookup_expr='lte')
有了这个,我必须在 url 中传递两个参数:
/products/?expiration_date_after=2019-06-06&expiration_date_before=2019-06-12
但我只想传入 1 或 2 或 3 的 url,它将显示 1 周、2 周和 3 周的数据。
所以如果我通过 products/1 。它应该过滤下 1 周的到期日期。如果我通过 products/2 。它应该过滤下 1 个月的到期日期。
我是 django 的新手......所以请让我知道解决这个问题的最佳方法是什么。
解决方案
我以这种方式实现了这一点:
在 custom_filters 文件夹中:
from Django_filters import rest_framework as filters
from date time import date time, date, timedelta
import datetime
class DaysFromTodayFilter(filters.Filter):
def filter(self,qs,value):
if value not in (None,''):
days_key = int(value):
today = datetime.date.today()
if days_key ==1:
x_days_from_today = today + date time.timedelta(days=7)
elif days_key ==2:
x_days_from_today = today + date time.timedelta(days=14)
return qs.filter(**{'%s__%s'%(self.field_name, 'range'):(today, x_days_from_today)})
return qs
在views.py 文件中:
from Django_filters import rest_framework as filters
from views import DaysFromTodayFilter
from models import Products
import Django_filters
class ProductsFilter(Django_filters.FilterSet):
expiration_date_within = DaysFromTodayFilter(field_name='expiration_date')
它工作正常......
在网址中:
localhost:8000/products/1
是过滤所有将在 1 周内过期和 /2 两周后过期的产品
推荐阅读
- apache-spark - Apache Spark 2.3.1 - pyspark.sql.SparkSession.builder.enableHiveSupport() 是否必要?
- javascript - 引导选项卡菜单切换不更改变量
- razor-pages - ASP Core Razor Pages 两种方式绑定
- c# - 带有 RazorEngine 的 Linq 命名空间
- ruby-on-rails - Rails 5.1.4:在插入数据库或仅登录应用程序后,区域设置被重复的路径条目替换
- stata - 使用 Mata xl() 合并 Excel 中的单元格
- powershell - 跨列将变量写入现有 CSV
- excel - 具有 3 个条件的 Excel AND 语句
- javascript - 从 Javascript 中的 api 请求返回数据
- numpy - 带有滑动窗口的 Numpy 求和真的很慢