Django-选择相关查询集字段的MAX

时间:2020-03-16 06:09:52

标签: python django django-orm

请问我是否有型号:

class User(models.Model):
    name = ...
    dob = ...

class Event(models.Model):
    user = models.ForeignKey(User, ...)
    timestamp = models.DateTimeField()

我想查询所有用户并用事件计数和事件的最大值MAX进行注释。

我知道我可以做到:

Users.objects.all().annotate(event_count=models.Count('event_set'))

但是我如何最大程度地增加一个相关的查询集字段?我希望它是一个查询,例如:

SELECT Users。*,MAX(Events.timestamp),COUNT(Events) FROM Users JOIN Users.id = Events.user_id

上的事件

2 个答案:

答案 0 :(得分:2)

您可以使用Query Expressions来实现。根据您的代码,您可能必须使用与外键相关的名称,但这会导致如下所示:

from django.db.models import Count, F, Func,

Users.objects.all().annotate(
    event_count=Count('event_set'), 
    max_timestamp=Func(F('event_set__timestamp'), function='MAX')
)

答案 1 :(得分:0)

您可以尝试对此执行汇总查询:

$scope.downloadExport = function (id,filename,frmdata) {
         frmdata = {};
        var data = tdioServices.downloadexport(id,filename,frmdata);
         data.success(function(success) {
                var blob = new Blob([success], { type:"arraybuffer" });           
                var downloadLink = angular.element('<a></a>');
                downloadLink.attr('href',window.URL.createObjectURL(blob));
                downloadLink.attr('download', filename);
                downloadLink[0].click();
                $COMMON_ACCEPT = "Download Successfully";
                $COMMON_ACCEPT_TEXT = "Success";
                toastr.success($COMMON_ACCEPT, $COMMON_ACCEPT_TEXT);

        });
    };

在Django文档here

中查看上述代码的详细信息。