13

我开发了一个表单,用户可以在其中添加他/她first namelast name.

对于usernameunique属性),我设计了以下方法:

FirstName: harrY LastName: 波特 --> username: 哈利波特

FirstName: 哈利LastName: 波特 --> username: 哈利波特-1

FirstName: harrY LastName: 波特 --> username: 哈利波特 2

等等..

这是我的函数定义:

def return_slug(firstname, lastname):
    u_username = firstname.title()+'-'+lastname.title()         //Step 1
    u_username = '-'.join(u_username.split())                     //Step 2
    count = User.objects.filter(username=u_username).count()    //Step 3
    if count==0:
        return (u_username)
    else:
        return (u_username+'-%s' % count)

我不知道Step 3在实施之前要做什么。我应该在哪里[:len(u_username)]比较字符串?

编辑:

如果有多个实例Harry-Potter,则通过解决最后添加整数的问题应用此方法。我的问题是:我将如何检查最后一个整数是如何附加到Harry-Potter.

4

1 回答 1

17

尝试这个:

from django.utils.text import slugify

def return_slug(firstname, lastname):

    # get a slug of the firstname and last name.
    # it will normalize the string and add dashes for spaces
    # i.e. 'HaRrY POTTer' -> 'harry-potter'
    u_username = slugify(unicode('%s %s' % (firstname, lastname)))

    # split the username by the dashes, capitalize each part and re-combine
    # 'harry-potter' -> 'Harry-Potter'
    u_username = '-'.join([x.capitalize() for x in u_username.split('-')])

    # count the number of users that start with the username
    count = User.objects.filter(username__startswith=u_username).count()
    if count == 0:
        return u_username
    else:
        return '%s-%d' % (u_username, count)
于 2013-05-22T16:37:38.727 回答