1

我正在为我的 Django 项目使用简单的历史库。它非常漂亮,但我无法在基本模型对象旁边显示汇总的历史统计信息。这是我的模型的样子:

from django.db import models
from django.contrib.auth.models import User
from simple_history.models import HistoricalRecords

class RepairForm(models.Model):
    user_id = models.ForeignKey(User, on_delete=models.DO_NOTHING,)
    return_number = models.CharField(max_length=200, unique=True)
    status_id = models.ForeignKey(RFormStatus, on_delete=models.DO_NOTHING)
    ...

    history = HistoricalRecords()

    def __str__(self):
        return self.return_number

文档让我相信访问历史记录的正确方法是使用历史管理器。我可以得到我想要的两组信息:

所有形式(基础模型对象) -

RepairForm.objects.all()

User ID |             Return Number            | Status ID
-----------------------------------------------------------
33      | 0a6e6ef0-a444-4b63-bd93-ae55fe8a3cee | 65001
44      | 5f699795-5119-4dcd-8b94-34f7056e732c | 65002
...

历史计算(历史对象)在这个例子中,我得到了每个表格的最新事件——

RepairForm.history.all()\
            .values('return_number').annotate(latest_event_date=Max('history_date'))\
            .order_by('return_number')

          Return Number              | latest_event_date
-----------------------------------------------------------
0a6e6ef0-a444-4b63-bd93-ae55fe8a3cee | 7/27/2018
5f699795-5119-4dcd-8b94-34f7056e732c | 8/1/2018
...

我觉得这应该可以在一个查询中完成,但不是吗?输出如下内容的一个查询:

User ID |             Return Number            | Status ID | latest_event_date
------------------------------------------------------------------------------
33      | 0a6e6ef0-a444-4b63-bd93-ae55fe8a3cee | 65001     | 7/27/2018
44      | 5f699795-5119-4dcd-8b94-34f7056e732c | 65002     | 8/1/2018
...
4

1 回答 1

1

您可以添加一个属性,例如计算所需结果的“latest_event_date”。然后,当您在 RepairForm 上运行查询时,它总是会计算出来!

  @property
  def latest_event_date(self):
      ....
于 2018-08-02T19:27:47.437 回答