2015-03-01 1 views
4

Я создаю пользовательский пользователь django, и при попытке его использования я получаю следующую ошибку. Ошибка я получаю следующееОшибка AppRegistryNotReady с django 1.7 и пользовательским пользователем

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 = _('Χρήστες') 

Я также установки файла настроек, чтобы включить мою новую заказную модель пользователя.

(внутри settings.py)

AUTH_USER_MODEL = 'myapp.MyCustomUserModel' 

При входе в оболочку, пытаясь использовать свой новый пользовательский тип, как этот

from django.contrib.auth import get_user_model 
user = get_user_model().objects.all() 

я получаю ошибку выше. Что-то не так с Django 1.7

P.S: Я использовал makemigrations и мигрировал, чтобы создавать модели, и я за виртуальным пользователем.

+0

Как начать работу с оболочкой? Через manage.py? – GwynBleidD

+0

yes using mange.py – Apostolos

+0

@Apostolos Сделали ли вы, 'import django' и' django.setup() '? – thefourtheye

ответ

2

Начиная с django 1.7 вы не можете использовать get_user_model в своих файлах models.py или вы столкнетесь с этой проблемой. Подробности/причину можно увидеть в referencing the user model

Чтобы устранить эту проблему, в файлах models.py вместо ссылки на пользовательскую модель с помощью get_user_model необходимо импортировать имя из настроек.

from django.conf import settings 

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

Когда вы исправите проблему, она исправит ваше приложение, а также вашу оболочку.

+0

Я использую settings.AUTH_USER_MODEL во всех своих ссылках на мою пользовательскую модель. Моя проблема в том, что она работает с моего терминала linux, но не из моей оболочки pycharm. – Apostolos

0

Это сообщение было здесь некоторое время, я столкнулся с этой же проблемой сегодня (используя оболочку Django) и хотел бы поделиться быстрым обходным путем, написав пользовательский get_user_model() с помощью import_module.

под одной из ваших models.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]) 

Это работает в моей локальной машине (Mac) под Джанго оболочкой, и я надеюсь, что это будет также работать под PyCharm оболочки.

Смежные вопросы