如何使用Django的ORM仅在3行或更多行被分组时返回一组行?

2024-04-26 08:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下模型:

class Enquiry(models.Model):
    enquiryparent = models.ForeignKey('self',default=None, null=True, blank=True)
    type = models.SmallIntegerField()
    name = models.CharField(max_length=200)
    mobile = models.CharField(max_length=40,blank=True,null=True)
    email = models.EmailField(blank=True,null=True)
    message = models.TextField(blank=True,null=True)
    registered = models.DateTimeField(auto_now_add=True)

如何用Django编写以下查询:

计算一个特定的类型,比如说“x”,移动设备在三天内是唯一的(使用注册日期)为完整的集。。。你知道吗

示例:

id, type, mobile, registered
1, 2, 988, 01/11/2011
1, 2, 988, 02/11/2011
1, 2, 988, 03/11/2011
1, 4, 988, 04/11/2011
1, 2, 988, 05/11/2011
1, 2, 988, 06/11/2011
1, 2, 988, 07/11/2011
1, 2, 555, 07/11/2011

结果应该是:

id, type, mobile, registered
1, 2, 988, 03/11/2011
1, 2, 988, 05/11/2011
1, 2, 555, 07/11/2011

总计数=3。你知道吗


Tags: 模型idtruemodelmodelstypemobilenull
1条回答
网友
1楼 · 发布于 2024-04-26 08:12:04

如果我对你的理解是正确的,这似乎是可行的,但不幸的是我不熟悉Django的ORM。我想基本的想法可能是这样的:

  • 通过idid == 1在您的示例中)、始终等于1的静态整数列和sum(static1)这样的动态列进行选择
  • type过滤(如示例中的type == 2
  • registered排序
  • 分组依据mobile
  • sum(static1)大于等于3的过滤器

我知道这在原始SQL中是可能的,但我不知道如何在Django的ORM中实现。另一种选择是编写一个for循环来累加结果。你知道吗

相关问题 更多 >