Проблема с пониманием того, как создать пользовательскую модель пользователя в Django
Вот краткий обзор того, чего я добился на данный момент, чтобы убедиться, что мы все на одной волне. Обратите внимание, что я все еще новичок в Django, поэтому мой подход может быть не идеальным или даже близким к тому, каким он должен быть.
Создали новый проект Django и сразу применили начальные миграции (18 или 19)
Следующее, что я сделал, это создал новое приложение под названием «авторизация», вот так
python3 manage.py startapp authorization
А затем я добавил его в список «INSTALLED_APPS» в файле settings.py моего проекта
Затем я создал следующее в файле models.py
from django.db import models
from django.core.validators import MinValueValidator
from django.utils import timezone
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **extra_fields):
if not email:
raise ValueError('Please provide a value for email!')
email = self.normalize_email(email)
user = self.model(email = email, **extra_fields)
user.set_password(password)
user.save(using = self.db)
return user
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('role', 'OWNER')
extra_fields.setdefault('subscribed', True)
return self.create_user(email, password, **extra_fields)
class User(AbstractBaseUser, PermissionsMixin):
# id provided by default
username = models.CharField(
max_length = 30,
unique = True
)
email = models.EmailField(unique = True)
# password provided by default
favoriteFood = models.CharField(max_length = 255)
favoriteSnack = models.CharField(max_length = 255)
favoriteDrink = models.CharField(max_length = 255)
# Define the roles
ROLE_CHOICES = [
('USER', 'User'),
('CREATOR', 'Creator'),
('ADMIN', 'Admin'),
('OWNER', 'Owner'),
]
role = models.CharField(
max_length = 10,
choices = ROLE_CHOICES,
default = 'USER'
)
createdAt = models.DateTimeField(auto_now_add = True)
updatedAt = models.DateTimeField(auto_now = True)
deletedAt = models.BooleanField(default = True)
def soft_delete(self):
self.deletedAt = timezone.now()
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def __str__(self):
return self.email
Затем я создал ключ «AUTH_USER_MODEL» и установил его в значение «authorization.User».
Но потом, когда я это сделаю
python3 manage.py makemigrations
Меня возвращают мне
No changes detected
Почему мои изменения не распознаются?
Иногда Django не «распознает» новые приложения, когда еще ничего не инициализировано. Я не могу точно сказать почему , но я замечаю то же самое в своих собственных проектах, возможно, это как-то связано с папкой migrations
и тем, существует ли ее __init__.py
... но это чисто мои домыслы.
Во всяком случае, это исправит ситуацию:
python manage.py makemigrations <app_name>
Это даст указание Django создать миграции для этого конкретного приложения. Как только вы это сделаете, последующие изменения будут обнаружены makemigrations
как обычно.