Django CMS 3.1 和 Django 1.7.8 自定义用户模型

Django CMS 3.1 and Django 1.7.8 custom user model

我正在使用 Django 1.7.8 和 DjangoCMS 3.1。我想添加我的自定义用户模型。我的自定义模型未注册时出现异常。我发现了类似的问题,但无法解决。

我的项目结构:

.
├── djangocms
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── static
│   ├── templates
│   │   ├── base.html
│   │   ├── feature.html
│   │   ├── menu.html
│   │   └── page.html
│   ├── urls.py
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
├── media
├── project.db
├── static
└── users
    ├── admin.py
    ├── apps.py
    ├── apps.pyc
    ├── __init__.py
    ├── __init__.pyc
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

在settings.py

AUTH_USER_MODEL = 'users.UserProfile'

users/models.py

class UserProfile(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField('email address', max_length=255,
                          unique=True, db_index=True)

更新

我发现某些应用程序在 DjangoCMS 中崩溃自定义用户模型,当我添加评论时,django 注册表会找到我的模型。我的设置:

INSTALLED_APPS = (
    'djangocms_admin_style',
    #'djangocms_text_ckeditor',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.admin',
    'django.contrib.sites',
    'django.contrib.sitemaps',
    'django.contrib.staticfiles',
    'django.contrib.messages',

    #'cms',
    'menus',
    'sekizai',
    'treebeard',
    #'djangocms_style',
    #'djangocms_column',
    #'djangocms_file',
    #'djangocms_flash',
    #'djangocms_googlemap',
    #'djangocms_inherit',
    #'djangocms_link',
    #'djangocms_picture',
    #'djangocms_teaser',
    #'djangocms_video',
    'reversion',

    'djangocms',
    'users',
)

您不能将 abstract model 设置到您的 AUTH_USER_MODEL 中。 基本上抽象模型还不是具体模型。您需要一个具体的 User 模型。这也解释了为什么您的 Model 'users.UserProfile' is not registered

而且,您的 UserProfile 有点奇怪,它应该被称为 UserMyUserWhateverUser。 Django 有一个历史原因,即 UserProfile 命名约定总是通过 OneToOneField 引用 User 模型的附加信息。 See this Django 1.4 (old docs).

See this to you can create a custom user model.

定义模型的应用程序 必须在 INSTALLED_APPS 中的 cms 之前加载。 您需要将列表上移 'users',在 CMS 之前。

此外,DjangoCMS 需要一个至少包含以下字段的用户模型:

  • 电子邮件
  • 密码
  • is_active
  • is_staff
  • is_superuser

此外,它应该继承AbstractBaseUser和PermissionsMixin(或AbstractUser),并且必须定义一个字段作为USERNAME_FIELD(更多细节见Django文档)并定义一个get_fullname()方法.

模型还必须可以通过 django admin 进行编辑,并且有一个管理员 class 注册。