我有一个看起来像这样的查询
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,但事实并非如此)。
答案 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的检查,因为它已经不会返回任何没有推荐的用户。