Python django 1.7和自定义用户的AppRegistryNotReady错误

Python django 1.7和自定义用户的AppRegistryNotReady错误,python,django,django-custom-user,Python,Django,Django Custom User,我正在创建一个自定义django用户,在尝试使用它时出现以下错误。我得到的错误如下 AppRegistryNotReady: Models aren't loaded yet. 我的模型 class MyCustomUserManager(BaseUserManager): def create_user(self, username, email, password=None, **kwargs): if not username: rais

我正在创建一个自定义django用户,在尝试使用它时出现以下错误。我得到的错误如下

AppRegistryNotReady: Models aren't loaded yet.
我的模型

class MyCustomUserManager(BaseUserManager):

    def create_user(self, username, email, password=None, **kwargs):
        if not username:
            raise ValueError("Username must be defined for users")

        if not kwargs.get('email'):
            raise ValueError("Users must have a valid email")

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

        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, username, email, password, **kwargs):
        user = self.create_user(username, email,  password, **kwargs)
        user.is_admin = True
        user.save()


class MyCustomUser(AbstractBaseUser):
    username = models.CharField(max_length=40, unique=True)
    email = models.EmailField(max_length=255, unique=True, verbose_name=_('Email Address'))
    date_of_birth = models.DateField(auto_now=False, blank=False, null=False, verbose_name=_("Ημ. Γεννήσεως"))
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    first_name = models.CharField(max_length=40, blank=False, null=False, verbose_name=_("Όνομα"))
    last_name = models.CharField(max_length=40, blank=False, null=False, verbose_name=_("Επίθετο"))
    friends = models.ManyToManyField('self', related_name="friends")

    objects = MyCustomUserManager()

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

    def get_full_name(self):
        return "%s %s" % (self.first_name, self.last_name)    

    def __unicode__(self):
        return self.get_full_name()

    class Meta:
        verbose_name = _('Χρήστης')
        verbose_name_plural = _('Χρήστες')
我也有设置文件,包括我的新的自定义用户模型

(内部设置.py)

当登录shell试图使用我的新用户类型时,如下所示

from django.contrib.auth import get_user_model
user = get_user_model().objects.all()
我得到上面的错误。Django 1.7有什么问题吗


附言:我使用makemigrations和migrate来制作模型,我支持一个virtualenv。

从django 1.7开始,你不能在models.py文件中使用get_user_模型,否则你会遇到这个问题。详情/原因见

要解决此问题,在models.py文件中,您需要从设置导入名称,而不是使用get_user_model引用自定义用户模型

from django.conf import settings

class MyModel(models.Model):
    ...
    user = models.ForeignKey(settings.AUTH_USER_MODEL)

当你修复这个问题时,它将修复你的应用程序和shell。

这篇文章已经在这里发表了一段时间,我今天遇到了同样的问题(使用Django shell),我想通过使用
导入模块
编写一个自定义
获取用户模型()
来分享一个快速解决方法

在您的
模型之一.py下:

from django.conf import settings
from importlib import import_module

USER_MODEL = settings.AUTH_USER_MODEL.rsplit('.', 1)

def get_user_model():
    models = getattr(import_module(USER_MODEL[0]), 'models')
    return getattr(models, USER_MODEL[1])

这在Django shell下我的本地机器(Mac)中工作,我希望这也能在PyCharm shell下工作。

如何启动shell?通过manage.py?@Apostolos,您做了什么,
import django
django.setup()
?文档中说:另一个常见的罪魁祸首是django.contrib.auth.get\u user\u model()。使用AUTH_USER_MODEL设置在导入时引用用户模型。请检查中的这些答案是否有助于您。我应该在何处导入django.setup。我正在运行django shell,它会自动导入所有这些内容。我正在对我的自定义用户模型的所有引用使用settings.AUTH_USER_MODEL。我的问题是,它可以从我的linux终端工作,但不能从我的pycharm shell工作。
from django.conf import settings
from importlib import import_module

USER_MODEL = settings.AUTH_USER_MODEL.rsplit('.', 1)

def get_user_model():
    models = getattr(import_module(USER_MODEL[0]), 'models')
    return getattr(models, USER_MODEL[1])