什么是一种有效的方法来获取Django中按字段分组的对象的数量?

丹尼

我正在开发一个大型Django应用程序,特别是其中的一部分,该应用程序发出许多电子邮件,然后收集有关它们的信息。我有两个通过第三个模型相互关联的模型:

SendEvent是一种用于在我成功发送任意数量的电子邮件时捕获的模型-它记录了一些与问题无关的数据。

SentEmail是中间表。它包含对SendEvent的外键引用,名为sendevent以及其他一些附加信息。

然后,我有了一个名为EmailEvents的模型,该模型正在侦听我正在使用的第三方邮件应用程序中的某些webhooks,并存储有关收件人对我的电子邮件进行处理的信息。该模型包含对SentEmail对象的外键引用。有多个与单个SentEmail关联的EmailEvent-最相关的是“已发送”和“已打开”(发送电子邮件时,将生成已发送事件并记录在EmailEvents表中,并通过唯一的ID字符串进行关联与SentEmail相似。与打开事件类似,不同的是它是在收件人打开电子邮件时生成的。事件的类型以字符串形式存储在名为event的字段中。

我正在尝试编写一个查询,该查询具有给定的SendEvent,可以让我对关联的EmailEvent的不同类型进行计数。

到目前为止,我已经解决了以下问题(send_event是包含对相关SendEvent的引用的变量):

email_events = EmailEvents.objects.filter(sent_mail__sendevent = sent_event)

我相信这将获取所有正确的EmailEvent对象(那些与与给定SendEvent关联的SentEmails关联的对象)。然后,我可以在其末尾添加.count()并获取所有EmailEvent的计数。不过,我真正想要的是将其拆分为不同类型的EmailEvents。我可以通过遍历QuerySet来手动执行此操作,但是我预计EmailEvents表会变得很大,所以我非常希望让ORM替我完成此工作。如何按事件将这些分组?

我可不可以做

EmailEvents.objects.filter(sent_mail__sendevent = sent_event).annotate(Count('event'))

那是最好的方法吗?那会起作用吗?任何建议都将不胜感激-我在处理大量数据方面还有些陌生。

布罗克森

这可以通过将objects.values与注释一起使用来实现。这是一个样本模型+测试。

首先在您的models.py中

class Foo(models.Model):
    action_type = models.CharField(max_length=50)

然后在tests.py中

from django.test import TestCase
from django.db.models import Count
from foo.models import Foo

class MyTestCase(TestCase):
    def test_group_query(self):
        options = ('created', 'deleted', 'updated')
        for i in range(32):
            Foo.objects.create(
                action_type=options[i%3]
                )
        results = Foo.objects.values('action_type').annotate(Count('action_type'))
        print results

产生一个具有以下内容的数组

{'action_type__count': 11, 'action_type': u'created'}, 
{'action_type__count': 11, 'action_type': u'deleted'}, 
{'action_type__count': 10, 'action_type': u'updated'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否有一种简单的方法来获取单词中重复字符的数量?

是否有一种简单的方法来获取Java中特定类的所有对象实例

有没有一种简单的方法来获取Java对象的大小?

有没有一种有效的方法来计算golang中的执行时间?

有没有一种有效的方法来连接golang模板中的字符串

是否有一种简单的方法来获取页面对象以在黄瓜中创建通用方法?

Java:是否有一种简单的方法来按名称获取Cookie?

一种简单有效的方法来选择数据帧中的非NA数据范围

寻找一种更有效的方法来根据数据框列中的字典创建新列

一种有效的方法来计算范围内唯一元素的数量?

TensorFlow:一种有效的方法来获取张量中不小于零的最小元素的索引吗?

有没有一种更有效的方法来在Access中存储对象容器?

有没有一种方法来获取对象中属性值的数组?

除了NumPy矩阵中的特定列,是否有一种有效的方法来获取max元素的位置?

Azure Keyvault错误:尝试了以下三种方法来获取访问令牌,但没有一种有效

一种快速有效的方法来计算熊猫中各行之间的时差?

有没有一种有效的方法来从字典中检索值

一种有效的方法来获取每个类别所售产品的总量

是否有一种更有效的方法来将图像居中在浮动div中

需要一种有效的方法来从JSON字符串获取JObject

是否有一种有效的方法来删除PHP多维数组中的重复项

在Python中,什么是一种清晰有效的方法来计算区域中的事物?

一种有效的方法来对R中的组内行的子集进行分组然后应用功能

一种更有效的方法来对netstat命令的结果进行排序

有没有一种有效的方法来搜索非常大的文件中的字典?

一种有效的方法来计算数组中某种元素的数量

有没有一种有效的方法来计算比特流中 1 的密度?

寻找一种更有效的方法来创建 4 向链表

有没有一种有效的方法可以从 Admin 操作中获取 modeladmin 对象的 Django 模型?