2015-11-13 10 views
7

मैं एक कस्टम यूज़र के साथ django-पंजीकरण-redux स्थापित करने की कोशिश कर रहा हूँ।"मॉडल अभी तक लोड नहीं हैं" क्यों हैं?

from __future__ import unicode_literals 


from django import forms 
from django.utils.translation import ugettext_lazy as _ 
from django.contrib.auth.forms import UserCreationForm 

from .users import UserModel, UsernameField 

User = UserModel() 


class RegistrationForm(UserCreationForm): 

    required_css_class = 'required' 
    email = forms.EmailField(label=_("E-mail")) 

    class Meta: 
     model = customUser 
     fields = ('email') 

साथ ही, models.py है:

AUTH_USER_MODEL = 'app.customUser' 

पंजीकरण फार्म एक निर्देशिका ../registration/forms.py में है:

मैं अपने settings.py में यह भी शामिल है निम्नलिखित:

0,123,516:

from __future__ import unicode_literals 
from django.db import models 

# Create your models here. 

import datetime 
import hashlib 
import random 
import re 

from django.conf import settings 
from django.core.mail import EmailMultiAlternatives 
from django.db import models 
from django.template import RequestContext, TemplateDoesNotExist 
from django.template.loader import render_to_string 
from django.utils.translation import ugettext_lazy as _ 
from django.utils.encoding import python_2_unicode_compatible 
from django.utils.timezone import now as datetime_now 
from django.utils import six 

from .users import UserModel, UserModelString 


from django.contrib.auth.models import BaseUserManager, AbstractBaseUser 
from django.contrib.auth.admin import UserAdmin 


class customUserManager(BaseUserManager): 
    def create_user(self, email, password=None): 
     """ 
     Creates and saves a User with the given email, date of 
    birth and password. 
     """ 
     if not email: 
      raise ValueError('Users must have an email address') 

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

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

    def create_superuser(self, email, password): 
     """ 
     Creates and saves a superuser with the given email, date of 
    birth and password. 
     """ 
     user = self.create_user(email, 
      password=password, 
     ) 
     user.is_active = True 
     user.is_admin = True 
     user.save(using=self._db) 
     return user 

class customUser(AbstractBaseUser): 
    email = models.EmailField(verbose_name='email address', max_length=255, unique=True) 
    first_name = models.CharField(max_length=50, null=True) 
    middle_name = models.CharField(max_length=50, null=True) 
    last_name = models.CharField(max_length=50, null=True) 
    is_active = models.BooleanField(default=False) 
    is_admin = models.BooleanField(default=False) 

    objects = customUserManager() 

    USERNAME_FIELD = 'email' 


class customUserAdmin(UserAdmin): 
    # The forms to add and change user instances 
    #form = UserChangeForm 
    #add_form = RegisterationForm 

class RegistrationManager(models.Manager): 
    """ 
    """ 

यहाँ Traceback है

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
utility.execute() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 312, in execute 
django.setup() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/__init__.py", line 18, in setup 
apps.populate(settings.INSTALLED_APPS) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/apps/registry.py", line 108, in populate 
app_config.import_models(all_models) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/apps/config.py", line 198, in import_models 
self.models_module = import_module(models_module_name) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module 
__import__(name) 
    File "/Users/Desktop/app/sites/models.py", line 21, in <module> 
from .users import UserModel, UserModelString 
    File "/Users/Desktop/app/sites/users.py", line 4, in <module> 
UserModel = get_user_model() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 150, in get_user_model 
return django_apps.get_model(settings.AUTH_USER_MODEL) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/apps/registry.py", line 199, in get_model 
self.check_models_ready() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/apps/registry.py", line 131, in check_models_ready 
raise AppRegistryNotReady("Models aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 

अगर मैं() मेरी users.py में get_user_model में, मैं इस त्रुटि को दूर:

users.py

from django.conf import settings 
from django.contrib.auth import get_user_model 

UserModel = get_user_model 

def UserModelString(): 
    try: 
     return settings.AUTH_USER_MODEL 
    except AttributeError: 
     return 'auth.User' 


def UsernameField(): 
    return getattr(UserModel(), 'USERNAME_FIELD', 'email') 

त्रुटि:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 155, in get_user_model 
"AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL 
django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'app.customUser' that has not been installed 
+0

आपने 'पंजीकरणफॉर्म' को परिभाषित किया था? हमें 'ऐप/साइट्स/models.py' दिखाएं। – ozgur

+0

यहां यह है: मुझे बताएं कि आपको और क्या चाहिए। –

उत्तर

7

यहाँ है get_user_model फ़ंक्शन का दस्तावेज़ जो मदद कर सकता है।

Generally speaking, you should reference the User model with the AUTH_USER_MODEL setting in code that is executed at import time. get_user_model() only works once Django has imported all models.

समस्या फ़ाइल ../registration/forms.py में है:

User = UserModel() 

UserModel आयात समय है, जो गलत है और अपवाद 'मॉडल अभी तक लोड नहीं कर रहे हैं को फेंक देता में क्रियान्वित किया गया है। अपने फॉर्म विधियों/कार्यों के अंदर सीधे UserModel() का उपयोग करें जहां इसकी आवश्यकता है। कुछ उदाहरण here देखें।

उम्मीद है कि इससे मदद मिलती है।

+2

Django 1.11 के रूप में, ["आयात समय पर get_user_model() को कॉल करने की क्षमता जोड़ा गया था।"] (Https://docs.djangoproject.com/en/1.11/topics/auth/customizing) – bsapaka

संबंधित मुद्दे

 संबंधित मुद्दे