DJANGO - 使用简单的历史记录,如何在一个查询中同时显示基本模型记录和相关的历史记录组计算?
DJANGO - Using simple history, how can I show both a base model record and a related history group calculation in one query?
我正在为我的 Django 项目使用 simple history 库。这非常漂亮,但我无法在基本模型对象旁边显示聚合历史统计数据。
这是我的模型的样子:
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
Docs 让我相信访问历史记录的正确方法是使用历史管理器。我可以得到我想要的两组信息:
所有表单(基本模型对象)-
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
...
您可以添加一个 属性 例如 "latest_event_date" 来计算想要的 result.then 它总是在您 运行 在 RepairForm 上查询时计算!
@property
def latest_event_date(self):
....
我正在为我的 Django 项目使用 simple history 库。这非常漂亮,但我无法在基本模型对象旁边显示聚合历史统计数据。 这是我的模型的样子:
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
Docs 让我相信访问历史记录的正确方法是使用历史管理器。我可以得到我想要的两组信息:
所有表单(基本模型对象)-
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
...
您可以添加一个 属性 例如 "latest_event_date" 来计算想要的 result.then 它总是在您 运行 在 RepairForm 上查询时计算!
@property
def latest_event_date(self):
....