gpt4 book ai didi

python - 如何从具有更改日志的表和 Django 中的事件表中获取可以推迟给定日期的事件?

转载 作者:行者123 更新时间:2023-11-29 12:59:52 25 4
gpt4 key购买 nike

我被困在一个场景中,我正在制作一个返回给定月份和年份组合中的事件的 API。

数据库结构:

Event - 包含事件的基本详细信息。EventLog - 有一个指向 event 的外键,一个 from_date 和一个 to_date

创建事件时,会在事件表和事件日志表中创建一个条目(from_date 设置为空)。

当事件被推迟时,会在事件日志中创建一个条目,其中包含之前的日期和当前的日期。

现在给定一个日期,我想显示在该日期发生的事件以及应该在那天发生的具有最新日期的推迟事件。

我应该如何在不对数据库进行太多调用的情况下处理它?<​​/p>

最佳答案

如果 EventLog 的目的是跟踪事件的开始和结束日期随时间的变化,您应该做的是始终将当前日期存储在 Event 表中,并记下 EventLog 中的变化。

当事件被推迟时,事件中的日期会发生变化,并且还会在事件日志中注明。

那么你的查询看起来像这样:

current_events = Event.objects.filter(from_date__lte=now, to_date__gte=now)
postponed_events = Event.objects.exclude(from_date__lte=now, to_date__gte=now).filter(logs__from_date__lte=now, logs__to_date__gte=now)
all_events = current_events + postponed_events

在您的事件模型中:

class Event(models.Model):
...
from_date = ...
to_date = ...

def postpone(self, from_date, to_date):
EventLog.objects.create(event=self, from_date=self.from_date, to_date=self.to_date)
self.from_date = from_date
self.to_date = to_date
self.save()

我知道您似乎在通过两次存储 from_date 和 to_date 来复制数据,但实际上并非如此,尤其是当您仅使用 EventLog 来存储更改而不是当前时间时。

关于python - 如何从具有更改日志的表和 Django 中的事件表中获取可以推迟给定日期的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33408497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com