我开发了一个表单,用户可以在其中添加他/她first name
和last 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
的最后一个整数是多少。
答案 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)