Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automatically create username in User model in Django based on other fields

I have been searching for best practice, but I did not found it. I was even unable to find solution I need used by anyone else.

I need to generate username of the user based on his other data (first name & last name), optionally appending integer at the end, until I get the unique username.

I strongly prefer doing that in model. Is there some standard way to do that? Or is it only appropriate in forms? I have been researching overloading of various User model methods, as well as signals, and did not find any proper place I could add it.

like image 789
Tadeck Avatar asked Oct 07 '22 03:10

Tadeck


1 Answers

One possible solution could be through pre_save signal.

def my_callback(sender, **kwargs):
    obj = kwargs['instance'] 
    if not obj.id:
       username = get_unique_username(obj) # method that combines first name and last name then query on User model, if record found, will append integer 1 and then query again, until found unique username
       obj.username = username
pre_save.connect(my_callback, sender=User)
like image 125
Ahsan Avatar answered Oct 13 '22 10:10

Ahsan