我正在尝试使用customUser安装django注册redux。
我已将其包含在我的设置中。py:
AUTH_USER_MODEL = 'app.customUser'
注册表在目录中/注册/表格.py:
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具有以下功能:
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 (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
以下是get_user_model函数的文档可能会有所帮助。
一般来说,您应该使用在导入时间执行的代码中的AUTH_USER_MODEL设置。get_user_model()只有在Django导入所有模型后才有效。
问题出现在文件../registration/forms.py
:中
User = UserModel()
UserModel
在导入时执行,这是错误的,并引发异常"尚未加载模型"。在需要的地方直接在表单方法/函数中使用UserModel()
。看看这里的几个例子。
希望这能有所帮助。