Проблема с пониманием того, как создать пользовательскую модель пользователя в 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 как обычно.

Вернуться на верх