我希望用户名字段自动填充此值:
username = str(n);
其中n
是一个数字(自动增量或随机)。
我尝试在保存方法中添加它:
username = str(random.randint(0,1000000)
但是当{2}用户n
相同时存在冲突问题。
我该怎么做?
答案 0 :(得分:3)
以下是生成用户名方法的修改版本,该方法允许您创建更易读的用户名,以防您将其用作任何用途的标识符。
from random import choice
from string import ascii_lowercase, digits
from django.contrib.auth.models import User
def generate_random_username(length=16, chars=ascii_lowercase+digits, split=4, delimiter='-'):
username = ''.join([choice(chars) for i in xrange(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;
答案 1 :(得分:1)
生成它
username = str(random.randint(0,1000000)
并检查具有此名称的用户
User.objects.get(username=username)
如果你找到了某人,就会生成一个新的。
def GenerateUsername():
username = str(random.randint(0,1000000))
try:
User.objects.get(username=username)
return GenerateUsername()
except User.DoesNotExist:
return username;
答案 2 :(得分:1)
根据Antony Hatchkins的评论我最近实施了一个类似的算法,我想发布反馈意见,在没有保护的情况下使用失败保护而不是递归:
def GenerateUsername():
i = 0
MAX = 1000000
while(i < MAX):
username = str(random.randint(0,MAX))
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
i+=1
raise Exception('All random username are taken')