当前位置: 首页 > 面试题库 >

今天发生的Django过滤器事件

贾成天
2023-03-14
问题内容

我正在努力在Django过滤器中逻辑地表示以下内容。我有一个“事件”模型和一个位置模型,可以表示为:

class Location(models.Model):
    name = models.CharField(max_length=255)

class Event(models.Model):
    start_date = models.DateTimeField()
    end_date = models.DateTimeField()
    location = models.ForeignKeyField(Location)

    objects = EventManager()

对于给定的位置,我想选择今天发生的所有事件。我已经通过EventManager中的’bookings_today’方法尝试了各种策略,但是正确的过滤器语法使我难以理解:

class EventManager(models.Manager):
    def bookings_today(self, location_id):
        bookings = self.filter(location=location_id, start=?, end=?)

date()失败,因为这使时间清零,并且白天的时间对于应用程序至关重要,日期的最小值和最大值也是如此,并将它们用作书挡。此外,还有多种可能的有效配置:

start_date < today, end_date during today
start_date during today, end_date during today
start_date during today, end_date after today

我需要编写一整套不同选项的代码,还是有一种更简单,更优雅的方法?


问题答案:

您将需要两个不同的datetime阈值-today_starttoday_end

from datetime import datetime, timedelta, time

today = datetime.now().date()
tomorrow = today + timedelta(1)
today_start = datetime.combine(today, time())
today_end = datetime.combine(tomorrow, time())

今天发生的所有事情都必须在 之前 开始today_end 之后 结束today_start,因此:

class EventManager(models.Manager):
    def bookings_today(self, location_id):
        # Construction of today_end / today_start as above, omitted for brevity
        return self.filter(location=location_id, start__lte=today_end, end__gte=today_start)

(PS叫DateTimeField(非DateFieldfoo_date会令人误解,请考虑-startend…)



 类似资料:
  • 问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作:

  • 问题内容: 我对此有疑问,因此没有找到正确的答案,因此在这里我将留下一个小教程。 目标是按今天的日期过滤获取的对象。 注意:它与Swift 3兼容。 问题答案: 您不能简单地将您的日期与今天的日期进行比较: 它不会显示任何内容,因为您的日期不太可能是精确的比较日期(也包括秒和毫秒) 解决方法是这样的: 到目前为止,这是仅显示具有当前日期的对象的最简单,最短的方法。

  • 本文向大家介绍Django 自定义过滤器,包括了Django 自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器允许您将函数应用于变量。此函数可以使用0或1参数。语法如下: 过滤器可以链接在一起,因此非常有效: 如果将其翻译成python,上面的代码行将给出以下内容: 在此示例中,我们将编写一个verbose_name适用于模型(实例或类)或QuerySet的自定义过滤器。它将返回

  • 问题内容: 如何从“全部”更改默认过滤器选择?我有一个名为领域它有三个值:和。当我在Django admin中使用时,默认情况下将过滤器设置为“全部”,但默认情况下我想将其设置为待处理。 问题答案:

  • web3j过滤器提供以太坊网络发生的某些事件的通知,对java和安卓程序员来说很有用。在Ethereum以太坊中支持三类过滤器: 块滤波器(Block filters) 未决交易过滤器(Pending transaction filters) 主题过滤器(Topic filters) 块过滤器和未决交易过滤器提供了在网络上创建新交易或块的通知。 主题过滤器更灵活。允许根据提供的特定标准创建过滤器。

  • 问题内容: 我正在使用该软件包在列表视图中提供搜索功能。 现在,我还要向该视图添加分页。 我正在尝试将分页与过滤后的查询集结合起来,但是我不知道如何继续。 到目前为止,我已经尝试了以下方法: 问题答案: 要使用Django过滤器并对过滤后的结果进行分页,你可以执行以下操作: 为你的模型创建一个过滤器类: 开 每个对象都有一个包含过滤查询集的属性,如果需要,你甚至可以覆盖它。 我们将对我们的财产进行