【问题标题】:Trying to Write a Django Query That Counts Events Per Day For Events That Span Multiple Days尝试编写一个 Django 查询,对跨越多天的事件每天计数事件
【发布时间】:2020-02-19 06:02:32
【问题描述】:

我正在使用 Django,并尝试根据多天运行的事件来计算每天运行的事件数。例如,如果事件 1 从星期一开始,星期三结束,事件 2 从星期二开始,星期四结束,那么每天的事件计数应该是:星期一(1 个事件)、星期二(2 个事件)、星期三(2 个事件)、星期四(1 个活动)。事件模型如下所示:

class Event(models.Model):
   name = models.CharField(max_length=300, blank=True) 
   start_date = models.DateTimeField(blank=True)
   end_date = models.DateTimeField(blank=True)

   def __str__(self):
       return self.name

我希望查询结果包括我们计算的日期、当天运行的事件数以及当天运行的每个事件的名称。对此 Django 查询的任何帮助都会有所帮助。提前致谢!

【问题讨论】:

  • 我认为通过查询集在这里做你想做的事情是不可能的。你需要使用pythonic的方式来实现它
  • @ruddra,有什么 Pythonic 方式的建议吗? :)
  • Bạn tham khảo bài này: stackoverflow.com/questions/32708749/…
  • 或者使用 Python 获取所需信息最少的所有对象(仅 'start_date' 和 'end_date' 字段)并计数。

标签: python django django-models django-queryset django-orm


【解决方案1】:

要查找特定日期的计数,我们可以执行以下操作:

from datetime import date

target_date = date.today()    # Change this according to your needs.

todays_events = Event.objects.filter(
    start_date__date__lte=target_date,    # 'start_date__lte=target_date' if 'start_date' is a 'DateField'.
    end_date__date__gte=target_date,      # 'end_date__gte=target_date' if 'end_date' is a 'DateField'.
).count()

您可能想阅读:QuerySet API reference。它有很多例子。


要查找所有日期,请使用 minimum information required 获取所有对象并使用 Python 计数。

events = Event.objects.all().only('start_date', 'end_date')    # Only fetch 'start_date' and 'end_date' fields.

用 Python 编写代码。

【讨论】:

  • 如果没有目标日期,这将如何工作?我想返回数据库中所有事件的每天计数,因此这一天将是所有事件的开始日期和结束日期之间的每一天。
  • 更新了答案。请检查!
猜你喜欢
  • 2016-04-24
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
相关资源
最近更新 更多