为什么这个循环总是返回原始参数?

时间:2011-07-13 17:55:29

标签: python django loops

我有一个检查用户名的循环。 如果用户名存在,我想为每个循环增加计数器。 然后将该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

2 个答案:

答案 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}}应该会发生变化。