【问题标题】:Date queries in djangodjango中的日期查询
【发布时间】:2012-10-13 05:36:36
【问题描述】:

我有一个包含两个日期字段的模型,start_date 和 end_date

我希望查询此模型以获取介于两个给定日期之间的所有模型实例。我也希望模型与此范围重叠。

这两个给定日期是一个月的开始日期和结束日期。

我试过做类似的事情:

Model.objects.filter(Q(start_date__range=[start_range, end_range])|Q(end_date__range=[start_range, end_range])) 

但如果 start_date 和 end_date 相隔一个月以上,则会失败。

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    这是怎么失败的?不返回范围优于一个月的对象?

    我不明白为什么你的方法不起作用,但你总是可以尝试使用:

    Model.objects.filter(Q(start_date__gt=start_range)|Q(end_date__lt=end_range))
    

    只要 start_date 低于 end_date 就可以工作,但这应该在表单验证中处理。

    另一个想法,但在数据库查询方面可能效率不高,是过滤 out 范围内根本 的对象。从逻辑的角度来看,这似乎更有效,但同样,在数据大小和数据库查询方面可能不是这样。

    【讨论】:

    • 另外,我不会将范围的开头命名为“start_range”,但“range_start”、“start_range”听起来像...范围。
    • 模型有一个开始和结束日期,这两个日期可以相隔 3 个月。我有一个月的 start_date 和 end_date。我想获取所有具有该给定月份内的 start_date 和/或 end_date 的模型。您的查询没有这样做。
    • Np,是的,我也想收到与范围重叠的模型。
    • 我修正了我的答案,希望这对你有用。我真的很想测试它,但我目前没有准备好测试的 Django 环境。
    • 我认为这个查询包含解决方案 Project.objects.filter(Q(start_date__lte=start_range)|Q(start_date__range=[start_range, end_range]))\ .filter(Q(end_date__gte=end_range)| Q(end_date__range=[start_range, end_range])),
    【解决方案2】:
    Model.objects.filter(start_date__gt=start_range).filter(end_date__lt=end_range)
    

    这就是你所需要的

    【讨论】:

    • 这行不通,因为他还希望对象与范围重叠。
    • 我在他评论你的帖子之前就发帖了 :)
    • 哦,抱歉没看到……事实上,你甚至在我回答之前就发布了,但我错过了。对不起:/
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 2014-12-17
    • 2012-09-10
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2016-07-10
    相关资源
    最近更新 更多