首页 > 解决方案 > Django/Python:向大量用户名添加递增数字

问题描述

我正在创建一个有玩家列表的游戏,并且在创建游戏时会生成玩家(用户)列表。下面的函数使用随机用户名创建一个播放器,例如“Player_0tt”。

我希望不使用随机 ascii_lowercase + 数字,而是将每个用户增加 1。所以第一个用户称为 Player_1、Player_2..etc。我会将游戏 ID 添加到用户名中,以使每个游戏用户都独一无二,但现在我正试图在我的用户名后面添加 1、2、3...。

我应该创建一个递增的新函数,还是有更聪明的方法来做到这一点?

创建随机用户名

def generate_username(length=3, chars=ascii_lowercase + digits, split=7, delimiter='_'):
    username = 'Player' + ''.join([choice(chars) for i in range(length)])

    if split:
        username = delimiter.join([username[start:start + split] for start in range(0, len(username), split)])

    try:
        User.objects.get(username=username)
        return generate_random_username(length=length, chars=chars, split=split, delimiter=delimiter)
    except User.DoesNotExist:

        return username

标签: pythondjangodjango-views

解决方案


想办法。改变了我的方法。

我创建了一个计数器,而不是 generate_username 函数,它为每次生成的迭代(对于每个用户)进行计数。

它有点脱离上下文,但看起来如下:

对于创建的每个参与者,添加游戏 id 并从 1 开始计数

    count = 0
    for player_url in game_urls:
        count = count + 1
        user = User.objects.create_user(username='Player'+str(game.id)+'_'+str(count), password="123456", first_name=player_url, last_name=game.id)
        user.save()

这将导致生成的用户如下所示

播放器155_1

播放器155_2

...ETC

我现在只使用 first_name 和 last_name 表行作为数据。最好重命名用户行或添加一个名为 Game_ID 和 Player_URL


推荐阅读