在两个日期字段之间按年份按年份的过滤器Queryset

发布于 2025-01-17 17:21:11 字数 597 浏览 3 评论 0原文

我的模型中有一个 start_date 和 end_date 字段。用户应能够通过选择年份值来过滤记录,以便如果包含所选年份,则应显示跨越多年的记录。

例如: 选择的年份: 2019

start_dateend_date
2017-03-122021-09-03
2019-12-122020-06-05

我可以通过原始 SQL 执行此查询,如下所示:

SELECT * FROM `orders` WHERE '2019' BETWEEN YEAR(`start_date`) AND YEAR(`end_date`);

How can I do this using Django ORM and避免原始 SQL 查询?因为我已经在多个过滤器中使用了 ORM,只留下了这一点。

I have a start_date and an end_date fields in my model. The user shall be able to filter records by selecting a year value, so that records that span over multiple years should be shown if the year selected is included.

For example:
Selected year: 2019

start_dateend_date
2017-03-122021-09-03
2019-12-122020-06-05

I can do this query by raw SQL like that:

SELECT * FROM `orders` WHERE '2019' BETWEEN YEAR(`start_date`) AND YEAR(`end_date`);

How can I do this using Django ORM and avoid raw SQL queries? Because I am already using the ORM in multiple filters and only remaining this bit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

私藏温柔 2025-01-24 17:21:11

尝试以下操作:

YourModel.objects.filter(
    start_date__year__lte=2019, 
    end_date__year__gte=2019,
)

Try this:

YourModel.objects.filter(
    start_date__year__lte=2019, 
    end_date__year__gte=2019,
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文