45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from django.contrib.auth import get_user_model
|
|
from django.db import transaction
|
|
from django.db.models import Q
|
|
|
|
|
|
ADMIN_USER_DATA = {
|
|
"username": "admin",
|
|
"email": "admin@example.com",
|
|
"phone_number": "0912345678",
|
|
"first_name": "admin",
|
|
"last_name": "admin",
|
|
"password": "admin123456",
|
|
}
|
|
|
|
|
|
@transaction.atomic
|
|
def seed_admin_user():
|
|
user_model = get_user_model()
|
|
lookup = (
|
|
Q(username=ADMIN_USER_DATA["username"])
|
|
| Q(email=ADMIN_USER_DATA["email"])
|
|
| Q(phone_number=ADMIN_USER_DATA["phone_number"])
|
|
)
|
|
matched_users = list(user_model.objects.filter(lookup).order_by("id"))
|
|
|
|
if len(matched_users) > 1:
|
|
raise ValueError(
|
|
"Multiple users matched the admin seeder lookup. Resolve duplicates before seeding."
|
|
)
|
|
|
|
created = not matched_users
|
|
user = matched_users[0] if matched_users else user_model()
|
|
user.username = ADMIN_USER_DATA["username"]
|
|
user.email = ADMIN_USER_DATA["email"]
|
|
user.phone_number = ADMIN_USER_DATA["phone_number"]
|
|
user.first_name = ADMIN_USER_DATA["first_name"]
|
|
user.last_name = ADMIN_USER_DATA["last_name"]
|
|
user.is_staff = True
|
|
user.is_superuser = True
|
|
user.is_active = True
|
|
user.set_password(ADMIN_USER_DATA["password"])
|
|
user.save()
|
|
|
|
return user, created
|