我有一个检查用户名的循环。 如果用户名存在,我想为每个循环增加计数器。 然后将该Id添加到用户名。
这个循环总是返回传递的原始参数,我不知道为什么。我在form.py。
中的表单def save
上进行了操作
def check_username(self, username):
"""
check if username is taken. if it is then increment the counter and append to the username
"""
counter = 001
if User.objects.filter(username__iexact=username).exists():
counter += 1
username += str(counter)
self.check_username(username)
return username
答案 0 :(得分:2)
您应该在return self.check_username(username)
块中使用if
,否则,您的递归调用不会做太多。
可能没有按照您的意愿使用计数器。您会在尝试的每个用户名末尾添加“2”,例如username
- > username2
- > username22
。
话虽如此,while
循环肯定会更容易阅读。我会尝试这样的事情:
def check_username(self, username):
counter = 1
new_username = username
while not User.objects.filter(username__iexact=new_username).exists():
counter += 1
new_username = username + str(counter)
return new_username
答案 1 :(得分:0)
检查if User.objects...
条件的有效性,因为如果username
进入该区块,{{1}}应该会发生变化。