更严格的查询会产生更多结果?

时间:2010-05-28 02:17:56

标签: django django-queryset

我有一个看起来像这样的查询

affiliates = User.objects.annotate(referral_count=Count('referrals'))
                         .filter(referral_count__gt=0)

但是当我通过向过滤器添加referrals__user__date_joined__gt=start_date来限制它时,我的推荐次数会更高。

我正在尝试计算用户在一段时间内推荐的人数。

相关模型如下所示:

class Profile(models.Model):
    user = models.ForeignKey(User, unique=True, related_name='profile')
    referred_by = models.ForeignKey(User, null=True, blank=True,
        related_name='referrals')

相反,当我这样尝试时:

affiliates = User.objects \
    .exclude(referrals__user__date_joined__lte=sd, \
        referrals__user__date_joined__gt=ed) \
    .annotate(referral_count=Count('referrals')) \
    .filter(referral_count__gt=0) 

exclude语句似乎什么都不做......计数不会改变(如果没有被引用的用户在该时间段内加入,则应为0,但事实并非如此)。

2 个答案:

答案 0 :(得分:1)

我不完全确定,但也许您可以尝试在查询中替换referrals referred_by。 当我尝试执行类似于你的查询时,它甚至会抛出错误。 referrals是管理员,而referred_by是字段的名称,因此在查询中更合乎逻辑。

答案 1 :(得分:0)

这似乎有效:

new_users = User.objects.filter(date_joined__gt=sd, date_joined__lte=ed)
new_referrals = User.objects.filter(referrals__user__in=new_users).annotate(referral_count=Count('referrals')).select_related('profile')   

不需要大于0的检查,因为它已经不会返回任何没有推荐的用户。