Эквивалент get_or_create для добавления пользователей
Есть ли более простой способ добавить пользователя, чем со следующим шаблоном?
try:
new_user = User.objects.create_user(username, email, password)
except IntegrityError:
messages.info(request, "This user already exists.")
else:
new_user.first_name = first_name
# continue with other things
Ответы
Ответ 1
Я так не думаю. Но вы можете проксифицировать пользователя Django:
class MyUser(User):
class Meta:
proxy = True
def get_or_create(self, username, email, password, *args, **kwargs):
try:
new_user = User.objects.create_user(username, email, password)
except IntegrityError:
return User.objects.get(username=username, email=email)
else:
new_user.first_name = kwargs['first_name'] # or what you want
...etc...
return new_user
Ответ 2
В Django 1.4 для пользователя существует функция get_or_create().
from django.contrib.auth.models import User
_user = User.objects.get_or_create(
username=u'bob',
password=u'bobspassword',
)
Ответ 3
Лучше не ловить IntegrityError
, как это может произойти по другим причинам. Вам нужно проверить, существует ли пользователь, за исключением пароля. Если пользователь уже существует, установите пароль.
user, created = User.objects.get_or_create(username=username, email=email)
if not created:
user.set_password(password)