6

django 1.5.1

我创建自定义身份验证模型:

文件 api/models.py

from django.contrib.auth.models import BaseUserManager, AbstractUser

class User(AbstractUser):

  token = models.CharField(max_length=64, null=False, blank=False, help_text=_('Photo for carte'), unique=True)
  updated_token = models.DateTimeField(auto_now_add=True, help_text=_('Create record'))

  USERNAME_FIELD = 'email'

  objects = MyUserManager()

  def __unicode__(self):
      return "пользователь: %s" % self.email
  class Meta:
      app_label = 'custom_auth'

文件设置.py

AUTH_USER_MODEL = 'custom_auth.User'
.....
INSTALLED_APPS = (
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api',
.....
'south',
'django.contrib.admin',

)

在 ./manage.py syncdb 我得到一个错误:

admin.logentry: 'user' has a relation with model <class 'api.models.User'>, which has either not been installed or is abstract.

如何决定这个问题?

编辑 1 尝试注释行并制作 syncdb:

'django.contrib.admin',

尝试在 ./manage.py shell 中创建用户后,syncdb 成功

In [1]: from api.models import User
In [2]: User.objects.create_superuser('test@test.com', 'test')

并收到错误:

DatabaseError: (1146, "Table 'app_name.custom_auth_user' doesn't exist")
4

2 回答 2

1

你需要app_label在你的类上设置一个,它也在你的INSTALLED_APPS:设置app_label = 'api'(默认)或添加'custom_auth'到你的INSTALLED_APPS(当然,它需要是一个有效的应用程序)。

Django 中的验证过程尝试使用 获取新的 User 类get_model,并且默认情况下get_model仅返回已安装应用程序的模型。您可以使用当前代码进行验证:

>>> loading.get_model('custom_auth', 'user')
>>> loading.get_model('custom_auth', 'user', only_installed=False)
  > api.models.User
于 2013-04-26T12:08:35.883 回答
0

您忘记将 Meta app_label 描述添加到 INSTALLED_APPS:

# Application definition

INSTALLED_APPS = (
    ...
    'custom_auth',
)
于 2014-08-19T11:11:15.220 回答