Django跨外键查询

时间:2011-07-14 05:48:21

标签: django django-queryset

我需要获取在其他两个模型中被引用为ForeignKey的用户列表。当他们达到这种复杂性时,我对查询仍然有点不清楚。

型号:

class Page(models.Model):
    user = models.ForeignKey(User)

class EmailSent(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)

在英语中,我想得到的是:10个活跃用户,他们有0页,但从未收到过发送给他们的名为check_in的电子邮件。

我在这里:

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0)[10]

但不确定如何做本质上的事情:

email_sent = EmailSent.objects.filter(user=user, name='check_in')

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

获得所需内容的一种可能方式是:

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0)
EmailSent.objects.filter(user__in=users, name='check_in')[10]

另一种方式是,

users = User.objects.filter(is_active=1).annotate(page_count=Count('pages')).filter(page_count=0)
users.emailsent_set.all()[10]

答案 1 :(得分:0)

尝试以下方法:

users = User.objects.filter(is_active=1)\
            .exclude(emailsent__name='check_in')\
            .extra(select={'page_count': "select count(*) from YOURAPP_page where user_id = auth_user.id"}, where=['page_count  0'])[:10]