Python django注解计数始终为1

时间:2019-10-10 08:26:30

标签: python django

我对Django有问题,我运行了这个django请求,但注释似乎不正确。

def find_team_from_match_request(match_request: MatchRequest) -> Optional[Team]:
"""Find a team from a MatchRequest"""

sport: Sport = match_request.criteria.sport
rank_group: int = match_request.group.get_rank(sport)
max_users: int = sport.playerPerTeam - match_request.group.count_users()
interval: int = match_request.get_rank_interval()

team: Team = Team.objects.annotate(
    num_users=Count('groups__users'),
    num_groups=Count('groups'),
    rank=Round('groups__users__sportsStats__rank'),
    rank_sum=Sum('groups__users__sportsStats__rank'),
    rank_distance=Func(Abs('rank') - rank_group, function='ABS')
).filter(
    match_id__isnull=True,
    sport=sport,
    num_users__lte=max_users,
    rank__lte=(rank_group + interval), rank__gt=(rank_group - interval),
    rank_distance__lte=interval
).order_by(
    'rank_distance',
    'rank'
).first()

if team is not None:
    print('team from match request', team)
    print('max_users', max_users)
    print('num_users', team.num_users)
    print('num_groups', team.num_groups)
    print('rank', team.rank)
    print('rank_sum', team.rank_sum)
    print('rank_distance', team.rank_distance)
    print('num users all', team.count_users())

return team

例如,运行此功能我有这些输出

max_users 4
num_users 1
num_groups 1
rank 1360
rank_sum 1360
rank_distance 240
num users all 3
team from match request Team object (1)

因此,当我使用该功能对团队中的用户(count_users)进行计数时,我得到num_users == 3,但是django发现的计数为1,我不明白为什么。

这是我的模特:

class Team(models.Model):
"""Team model"""

sport = models.ForeignKey(Sport, on_delete=models.DO_NOTHING,
                          related_name='teams')
groups = models.ManyToManyField(Group, related_name='teams')
match = models.ForeignKey(Match, on_delete=models.DO_NOTHING,
                          related_name='teams', null=True, blank=True)

def count_users(self) -> int:
    """Count the associated users of a team"""
    count_users = 0
    for group in self.groups.all():
        count_users += group.count_users()
    return count_users

def get_rank(self, sport: Sport) -> int:
    """Get the rank of a team"""
    ranks = []
    for group in self.groups.all():
        for user in group.users.all():
            sport_stats = user.sportsStats.filter(sport=sport).first()
            ranks.append(sport_stats.rank)

    return round(mean(ranks))


class Group(models.Model):
"""Group model"""

def get_users(self):
    """Get associated users of a group"""

    return self.users.all()

def get_teams(self):
    """Get associated teams of a group"""

    return self.teams.all()

def count_users(self) -> int:
    """Count the associated users of a group"""

    return self.users.all().count()

def get_rank(self, sport: Sport) -> int:
    """Get the rank of a group"""

    ranks = []
    for user in self.users.all():
        sport_stats = user.sportsStats.filter(sport=sport).first()
        ranks.append(sport_stats.rank)

    return round(mean(ranks))

class User(models.Model):
"""User model"""

username = models.CharField(max_length=200)
group = models.ForeignKey(Group, on_delete=models.DO_NOTHING,
                          related_name='users', blank=True, null=True)

我想念什么吗?

编辑:当我仅使用num_users批注时,我会得到想要的结果

0 个答案:

没有答案