在Django中串起字符串

时间:2013-05-22 16:21:53

标签: python django string unique-constraint

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

对于username(一个unique属性),我设计了以下方法:

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

FirstName:哈里LastName:POTTER - > username:Harry-Potter-1

FirstName:harrY LastName:PottEr - > username:Harry-Potter-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的最后一个整数是多少。

1 个答案:

答案 0 :(得分:9)

试试这个:

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)