首页 > 解决方案 > 使用 django-simple-history 和 django-queryable-properties 在 Django 查询集中添加历史字段值

问题描述

所以一些快速的背景知识:我正在尝试构建一个查询集以链接到管理面板并将其合并到整个应用程序堆栈中。这将帮助我为我的最终用户按需提供他们需要的信息,同时减少我手动创建和共享报告的需要。我正在尝试完成以下任务:

from queryable_properties.properties import queryableproperty
from simple_history.models import HistoricalModel
from datetime import date, timedelta
from django.db import models



class DataReport(models.Model):
    history = HistoricalRecord()
    formatted_date = models.DateTimeField(verbose_name="FormattedDate")
    date = models.CharField(verbose_name="Date", max_length=255, null=True)
    report_title= models.CharField(verbose_name="Report Title", max_length=255, null=True)
    severity_score = models.IntegerField(blank=True, null=True)

    @queryableproperty
    def get_prev_score(self):
        exclude_filters = {
            "severity_score__isnull": True,
            "date__lte": date.today() - timedelta(30)
        }

        hist_qs = self.history.exclude(**exclude_filters)
        prev_score = hist_qs.order_by('date').first()
        return prev_score.severity_score if prev_score else return None

理想情况下,我会从这里运行DateReport.objects.filter(severity_score__gt=F('get_prev_score'),但这不起作用,因为它需要注释,并且如果不通过 F 对象显式引用数据字段就无法进行注释,并且不能HistoricalRecord与 F 对象一起使用。我尝试过使用子查询,但只能在注释时返回空值。

有什么想法吗?

标签: pythondjangoannotationsdjango-simple-history

解决方案


推荐阅读