def create_groups(season: str, week: int) -> None: if not (1 <= week <= 7): return group: Group = Group.objects.filter_by(season=season, week=week).first() if group: return players: List[Player] = Player.objects.filter_by(season=season).get() players_to_create: List[Group] = list() for region in Config.REGIONS: region_players = [player for player in players if player.region == region] if len(region_players) != 4 * 4: raise PlayerInRegionNot16(region_players) for group_index in range(0, 4): group_players = random.sample(region_players, k=4) region_players = [player for player in region_players if player not in group_players] for player in group_players: group_player = Group() group_player.player = player.name group_player.week = week group_player.season = season group_player.group = Config.GROUPS[group_index] group_player.region = player.region players_to_create.append(group_player) Group.objects.create_all(Group.objects.to_dicts(players_to_create))