我对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
批注时,我会得到想要的结果