2013-05-22 16 views
5

Opracowałem formularz, w którym użytkownik dodaje swoje first name i last name.Slugify string w Django

Dla username (nieruchomości unique), mam opracowane następujące metody:

FirstName: Harry LastName: Potter ->username: Harry Potter-

FirstName: HARRY LastName: POTTER - ->username: Harry Potter--1

FirstName: Harry LastName: Potter ->username: Harry Potter-2-

I tak dalej ..

Oto moja definicja funkcji:

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) 

nie mogę dowiedzieć się, co zrobić przed Step 3 na realizację. Gdzie powinienem umieścić [:len(u_username)], aby porównać łańcuchy?

Edycja:

metoda ta jest stosowana, gdy istnieje wiele przypadków Harry-Potter przez rozwiązanie problemu dodając całkowitą w końcu. Moje pytanie brzmi: w jaki sposób sprawdzisz, jaka była ostatnia liczba całkowita dodana do Harry-Potter.

+0

chcesz stworzyć pocisk z imienia i nazwiska? Co trzeba liczyć? – PepperoniPizza

+0

@PepperoniPizza: Chcę policzyć, ile 'Harry-Potter-X', {gdzie' X' jest liczbą całkowitą} jest obecnych w bazie danych. Na przykład, jeśli jest tam '' Harry-Potter-56', to następna powinna otrzymać 'nazwę użytkownika' jako' Harry-Potter-57' – xan

+0

OK, rozumiem, czy możesz zamieścić swój model, żeby pomyśleć o zapytanie ? – PepperoniPizza

Odpowiedz

8

Spróbuj tego:

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) 
+0

Nie sądzę, że to jest poprawne. Gdzie jest sprawdzanie, ile 'Harry-Potter-X' {gdzie' X' jest liczbą całkowitą} znajduje się w bazie danych? – xan

+0

Jak to wygląda? To nie jest testowane, ale powinno wystarczyć! –

+0

Ahh..I przegapiłem '_startwith'. Odpoczynek działa dobrze. Inaczej mówiąc, moja implementacja będzie szybka lub twoja? Dowolny pomysł? Moja metoda nie wykorzystywała żadnego 'slugify'. – xan

Powiązane problemy