Django - 按满足条件的相关对象的数量过滤对象

时间:2016-06-22 13:21:27

标签: python sql django

鉴于以下模型:

class EmailVerification(models.Model):
    user = models.ForeignKey(User, related_name='email_verifications')
    token = models.CharField(max_length=30)
    email = models.CharField(max_length=200)
    expiry = models.DateTimeField()
    verified = models.BooleanField(default=False)

我想过滤至少有一封经过验证的电子邮件的User,例如:

User.objects.filter(num_verified_emails__gt=0)其中: num_verified_emails = EmailVerification.objects.filter(user=user, verified=True).count()

有没有办法在不使用自定义SQL的情况下完成此任务?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您稍微过度复杂了查询:您想要的是至少有一个EmailVerification且验证为True的用户。这可以通过简单的连接来完成:

 User.objects.filter(email_verifications__verified=True)

如果您确实需要过滤实际验证过的电子邮件数量,可以使用注释,但这里没有必要。