from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import AbstractUser
class АппUser(AbstractUser):
pass
user = AppUser(username="Bob")
# В этот момент ты создал объект класса User но это объект пока что не сохранен
# что бы сохранить объект в базе нужно вызвать метод .save()
user.save()
# Под капотом ORM создаст примерно вот такой запрос и запустит его
{'sql':
'''UPDATE "user_management_appuser"
SET "password" = \'\',
"last_login" = NULL,
"is_superuser" = false,
"username" = \'\',
"first_name" = \'\',
"last_name" = \'\',
"email" = \'\',
"is_staff" = false,
"is_active" = true,
"date_joined" = \'2021-07-26T13:30:20.374984+00:00\'::timestamptz
WHERE "user_management_appuser"."id" = 3
''',
'time': '0.008'}
# Таким образом метод save() использует для создания или обновления команду SQL `UPDATE`
# Другой способ создать пользователя это использовать метод create()
AppUser.objects.create(username="blah")
<AppUser: blah>
{'sql': '''INSERT INTO "user_management_appuser"
("password",
"last_login",
"is_superuser",
"username",
"first_name",
"last_name",
"email",
"is_staff",
"is_active",
"date_joined")
VALUES
(\'\',
NULL,
false,
\'blah\',
\'\',
\'\',
\'\',
false,
true,
\'2021-07-26T13:42:30.141972+00:00\'::timestamptz)
RETURNING "user_management_appuser"."id"''',
'time': '0.016'}
# Отличие этого метода в том что если пользователя нет то он будет создан и тебе вернется объект пользователя.
# Если объект уже существует то будет ошибка
AppUser.objects.create(username="blah")
...
django.db.utils.IntegrityError: duplicate key value violates unique constraint "user_management_appuser_username_key"
DETAIL: Key (username)=(blah) already exists.
# Еще один метод это get_or_create()
# Отличие от .create() в том что при повторном вызое не будет ошибки и тебе вернется объект пользователя.