【发布时间】:2019-09-23 01:57:09
【问题描述】:
我有一个包含这两个字段的基本模型 -
last_synced = models.DateTimeField(null=True, editable=False)
modified = models.DateTimeField(auto_now=True)
last_synced 默认为 null,并且每次更新模型时都会更新修改日期。 我的模型管理器中有一个 get_syncable_models,它返回所有行,修改日期大于 last_synced 日期
def get_syncable_models(self):
return self.filter(
Q(modified__gt=F('last_synced')) |
Q(last_synced__isnull=True),
reviewed=True,
)
get_syncable_models 函数由批处理调用,并使用 last_synced = timezone.now() 更新所有模型。 但是,虽然保存修改的日期大于 last_synced 日期(因为 Django 框架中的 timezone.now() 在应用层调用 timezone.now() 后的几毫秒调用),所以 get_syncable_models 函数只有在last_synced 为空。
我在这里考虑两个选项 -
- 编写一个保存方法并检查 last_synced 是否已更改,然后在 last_synced 日期上添加一秒。这也意味着我必须修改所有调用保存函数的子类,因为这个类是一个超类。
- 在模型中添加一个“同步”标志,批处理作业将其设置为真。编写一个保存方法并检查标志是否为真,然后在 last_synced 日期上加一秒。
如果有更简洁的 Django 解决方案,将不胜感激?
【问题讨论】:
标签: django django-models