Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django查询集的复杂注释_Django_Django Queryset - Fatal编程技术网

django查询集的复杂注释

django查询集的复杂注释,django,django-queryset,Django,Django Queryset,在django视图中,我无法从复杂的.annotate()调用中获得所需的所有信息。这是我的模型: RECORD_STATUS = ( (0, "Hidden"), (1, "Unhidden"), (2, "Deleted"), ) class Activity(models.Model): event_date = models.DateTimeField() duration = models.IntegerField(default=0)

在django视图中,我无法从复杂的
.annotate()
调用中获得所需的所有信息。这是我的模型:

RECORD_STATUS = (
    (0, "Hidden"),
    (1, "Unhidden"),
    (2, "Deleted"),
)
class Activity(models.Model):
    event_date = models.DateTimeField()
    duration = models.IntegerField(default=0)
    username = models.CharField(max_length=200)
    record_id = models.CharField(max_length=100)
    record_status = models.IntegerField(choices=RECORD_STATUS)
    record_quality = models.FloatField(default=0)
我想根据不同的记录id将以下值传递给我的视图模板:

  • 平均质量
  • 计数
  • 最新活动日期
  • 总持续时间
而且

…最新状态(具有特定记录id的最新事件日期的活动状态)

通过下面的queryset codechunk,我已经能够按预期获得其中的大部分,但是我无法获取特定
记录id
的最新状态。我倾向于相信一个
.extra()
调用可能是一种方法,但我似乎无法正确地构造它

record_id_details = Activity.objects.values(
    'record_id',
    ).annotate(
    ave_quality=Avg('record_quality'),
    count=Count('id'),
    latest_event_date=Max('event_date'),
    total_duration=Sum('duration'),
    # Here's where I'm going wrong
    # I need the record_statuses from the most recent Activities of each record_id
    latest_status=,# dont know... record_status WHERE Max(event_date) ???
).order_by(sort)

任何关于注释参数的建议都会给我提供我所需要的,或者帮助我构造额外的命令,我们将不胜感激。谢谢

我只需要执行第二个查询,这样我就可以将所有这些内容分开。比如:

latest = Activity.objects.filter(record_id="whatever_the_record_id_you_want").order_by("-event_date)
most_recent = latest[0]
what_you_asked_for = most_recent.record_status

没有内置的方法用Django queryset来表达这个查询。在两个查询中执行这项操作可能是纯粹使用ORM完成这项操作的最简单方法。如果您不介意使用一些原始SQL,并且您正在使用一个支持它的数据库,如PostgreSQL,那么您需要的工具称为窗口函数,您可以在此处找到详细信息: