[DJANGO] django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'player.Player' that has not been installed

Odpowiedz Nowy wątek
2020-02-05 17:42

Rejestracja: 9 miesięcy temu

Ostatnio: 1 tydzień temu

0

Szukałem w internecie, ale w sumie nawet stack overflow nie był w stanie mi pomóc. Wywala mi wyżej wymieniony błąd.
Zrobiłem sobie AbstractBaseUser, nadpisałem User za pomocą metody get_user_model().
W settings ustawiłem AUTH_USER_MODEL = 'player.Player'. Aplikacja player też oczywiście jest zainstalowana i dodana do INSTALLED_APPS

Poniżej kod models.py

from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
from django.core.validators import MinValueValidator
from django.core.exceptions import ObjectDoesNotExist
from django.utils import timezone

from company.models import Company
from city.models import City

User = get_user_model()

class MyPlayerManager(BaseUserManager):

    def create_user(self, email, username, password=None):
        if not email:
            raise ValueError('Users must have an e-mail address')
        if not username:
            raise ValueError('Users must have a username')

        user = self.model(
            email=self.normalize_email(email),
            username=username,
        )

        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, username, password):
        user = self.create_user(
            email=self.normalize_email(email),
            username=username,
            password=password,
        )

        user.is_admin = True
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)

        return user

class Player(AbstractBaseUser):
    # USER FIELDS
    email = models.EmailField(
        verbose_name='email',
        max_length=100,
        unique=True,
    )
    username = models.CharField(max_length=50, unique=True)
    date_joined = models.DateTimeField(
        verbose_name='date joined',
        auto_now_add=True,
    )
    last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    # PLAYER FIELDS
    SEX_CHOICES = (
        ('F', 'Female',),
        ('M', 'Male',),
    )
    # avatar
    money = models.DecimalField(decimal_places=2, max_digits=100, default=1000)
    respect = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )
    sex = models.CharField(max_length=1, choices=SEX_CHOICES, null=True)

    # stats
    intelligence = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )
    strength = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )
    charisma = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )
    luck = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )
    beauty = models.PositiveIntegerField(
        validators=[MinValueValidator(1)],
        default=1
    )

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', ]

    objects = MyPlayerManager()

    # USER FUNCS
    def __str__(self):
        return self.username

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

    # PLAYER FUNCS
    def residence(self):
        return City.objects.get(residents=self)

    def work_place(self):
        try:
            work = Company.objects.get(employees=self)
        except ObjectDoesNotExist:
            work = None
        return work

    def age(self):
        now = timezone.now()
        joined = self.date_joined
        delta = now - joined

        if delta.days > 0:
            return delta.days
        else:
            return None

Pozostało 580 znaków

2020-02-05 21:05

Rejestracja: 2 lata temu

Ostatnio: 4 minuty temu

0

Wywal User = get_user_model(), i tak nigdzie tego User nie używasz. Strzelam, że w tej linijce Django chce załadować player.Player, który jest zdefiniowany dopiero kilka linijek niżej.

edytowany 1x, ostatnio: iksde, 2020-02-05 21:07

Pozostało 580 znaków

2020-02-09 20:42

Rejestracja: 2 lata temu

Ostatnio: 10 godzin temu

1

By the way, nie lepiej byłoby mieć jednak osobny model Player z ForeignKey do standardowego modelu User?

Zauważ, że nie każdy użytkownik w Twoim systemie musi być graczem. Prawdopodobnie konta moderatorów bądź administratorów niekoniecznie muszą mieć jakiś związek z typowym profilem gracza. Pomyśl o tym :-)

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0