13

ユーザーが自分のfirst nameとを追加するフォームを開発しましたlast name

username(プロパティ)についてはunique、次の方法を考案しました。

FirstName: harry LastName: PottEr --> username: ハリー・ポッター

FirstName: ハリーLastName: ポッター --> username: ハリー・ポッター-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

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 に答える