Более строгий запрос дает больше результатов? - PullRequest
0 голосов
/ 28 мая 2010

У меня есть запрос, который выглядит так

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 ]

1 голос
/ 28 мая 2010

Я не совсем уверен, но, возможно, вы могли бы попробовать заменить referrals на referred_by в ваших запросах. Когда я пытаюсь выполнить запрос, похожий на ваш, он даже выдает ошибку. referrals - менеджер, а referred_by - имя поля, и поэтому логичнее использовать его в запросе.

0 голосов
/ 31 мая 2010

Это похоже на работу:

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 не нужна, поскольку она уже не вернет ни одного пользователя без рефералов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...