Django模型历史按日期和日期时间

时间:2018-01-24 21:49:34

标签: python django django-simple-history

假设我有这样的模型:

class Account(models.Model):
    balance = models.IntegerField()
    debt = models.IntegerField()
    history = HistoricalRecords()

我使用django-simple-history来获取模型的实例,因为它在提供的日期和时间存在:

inst = Account.history.as_of(datetime.datetime.now().date)

它工作正常,但我希望得到平衡字段表示的实例,因为它在提供的日期和时间存在,然后债务字段将是该日期的最新版本。我不知道这是否可行,没有找到任何相关内容。

1 个答案:

答案 0 :(得分:1)

历史记录ORM将根据您提交的模型返回一个模型,因为它存在于该时间点。

account = Account.objects.create(balance=1, debt=1)
account.save()
history_obj = account.history.last()
print(history_obj.debt)  # returns 1

account.debt = 222
account.save()
new_history_obj = account.history.last()
print(new_history_obj.debt)  # returns 222

假设您正在使用Account.history.as_of()方法返回您想要读取的历史记录对象,您可以这样做:

yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
history_obj = Account.history.as_of(yesterday)
print(history_obj.debt)  # returns not the current debt, but the debt as-of yesterday

除非我误解了你希望完成的事情,否则你可以用你在问题中的内容做到这一点:

inst = Account.history.as_of(datetime.datetime.now().date)
print(inst.debt)