使用Django-CMS将Django升级到1.5 - 用户模型问题

时间:2013-05-17 04:28:40

标签: django upgrade django-cms user-profile

我刚刚在Django 1.4下将一个站点从Django-CMS 2.3.5移动到2.4.1(来自Stackoverflow的help)。

我现在正在升级到Django 1.5,这很难,因为我需要将旧的单独用户配置文件更新为新的自定义用户模型。我遵循了优秀的说明here,并将所有对User的引用替换为settings.AUTH_USER_MODEL

不幸的是,Django-CMS的模型显然仍然引用User:当我输入manage.py runserver时,我收到此错误:

CommandError: One or more models did not validate:
cms.pagemoderatorstate: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.globalpagepermission: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pagepermission: 'user' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageuser: 'user_ptr' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageuser: 'created_by' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.
cms.pageusergroup: 'created_by' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.

如何让Django-CMS使用新的用户模型?

谢谢!

2 个答案:

答案 0 :(得分:1)

有一个非常简单的解决方案。只需在导入CMSPlugin之前注册您的自定义用户。示例:

from django.db import models
from django.contrib.auth import models as auth_models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
  telephone = models.CharField(max_length=100)
  email = models.CharField(max_length=100)

auth_models.User = User

from cms.models import CMSPlugin

答案 1 :(得分:0)

对于有此问题的其他人,以下是我从https://github.com/divio/django-cms/issues/1798学到的内容摘要。

有四种可能的选择:

  1. 如果您需要自定义用户模型的名称不是User,则需要等待。
  2. 您可以调用自定义用户模型用户 - 但是当我尝试这个时,我遇到了与相关m2m字段冲突的错误。上述链接有一些进一步的细节可能有助于解决这个问题。
  3. Django 1.5仍允许您使用用户个人资料。因此,如果您可以使用已弃用的功能,您仍然可以将Django-CMS 2.4和Django 1.5与用户配置文件一起使用,而不是使用自定义用户模型。 (我在这里误读了Django文档,并认为Django 1.5不支持用户配置文件。)
  4. 您通常可以在没有用户配置文件或自定义用户模型的情况下离开 - 它们最适合用于添加专门用于用户身份验证的数据。相反,您可以使用与User具有一对一关系的另一个模型,并使用反向关系来访问它。
  5. 在我的情况下,我将在短期内使用#3,在长期使用#4。