首页 文章

django 1.5扩展默认用户模型或替换它

提问于
浏览
3

环境:Django 1.5.1 Django CMS 2.4.1百日草最新我的自定义应用程序自定义Django CMS插件

基本上我可以扩展默认的Django(1.5.X)用户模型,如Django Ribbit Tutorial on NetTuts+

要么

在段落中替换完全自定义的模型,如Django Dev doc或Django2Scoops示例:"Dealing With the User Model"

为了测试我决定使用子类AbstractUser来自Django2Scoops书:“如果您喜欢Django的用户模型字段,请选择此选项,但需要额外的..fields . ”

但是我有以下错误:

notification.noticesetting:'user'定义与模型'auth.User'的关系,该模型已被换出 . 更新关系以指向settings.AUTH_USER_MODEL . cmsplugin_zinnia.latestentriesplugin:'authors'定义了与模型'auth.User'的关系,该模型已被换出 . 更新关系以指向settings.AUTH_USER_MODEL . cms.pageuser:'created_by'定义了与模型'auth.User'的关系,该模型已被换出 . 更新关系以指向settings.AUTH_USER_MODEL . cms.pageusergroup:'created_by'定义了与模型'auth.User'的关系,该模型已被换出 . 更新关系以指向settings.AUTH_USER_MODEL .

经过几个小时的阅读和测试,我找到了

Specifying custom User model (extends AbstractUser) doesn't work

正如错误消息所示 - 您需要更新关系以指向settings.AUTH_USER_MODEL . 第二个错误(“模型已被换出......”)是您直接引用用户模型这一事实的副作用 . 更改ForieignKey引用后,第三个错误将消失 . 我们已尽力确保顺利过渡到新的用户模型,但它不能完全透明 . 应用编写者需要将他们的应用更新为1.5兼容 . 基本上,如果Django 1.4应用程序包含对用户的硬编码外键引用,则它与Django 1.5不会100%兼容 . 拜托,你能举个更多例子吗?

Django/Python: Update the relation to point at settings.AUTH_USER_MODEL

在settings_example.py中,您有AUTH_USER_MODEL ='users.User' . 但是你使用的应用程序 - menu.bookmark--与django.contrib.auth.User有关 - 你不能同时拥有这两者 . 设置AUTH_USER_MODEL意味着您要用自己的内置Django用户模型替换它 . 有关详细信息,请参见http://procrastinatingdev.com/django/using-configurable-user-models-in-django-1-5/ .

但我不明白我该怎么解决这个问题 .

我需要什么:

  • 用户与学院 class (一个学院 - >更多用户)相关联

  • 用户或机构可以拥有不同的权限,并查看不同的django cms页面/插件 .

  • 用户的几个字段 .

Subclass AbstractUser是正确的吗?

如何解决“换出”错误?

我应该创建类似OpenTreeMap Code的东西

这个代码是不是已经弃用了?

谢谢!

2 回答

  • 5

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

    来自django.db导入模型
    从django.contrib.auth导入模型为auth_models
    来自django.contrib.auth.models导入AbstractUser

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

    auth_models.User =用户

    从cms.models导入CMSPlugin

  • 1

    以下是我在https://github.com/divio/django-cms/issues/1798进一步讨论的摘要 .

    有四种可能的选择:

    • 如果您需要自定义用户模型的名称不是User,则需要等待 .

    • 您可以调用自定义用户模型 User - 但是当我尝试这个时,我遇到了与相关m2m字段冲突的错误 . 上述链接有一些进一步的细节可能有助于解决这个问题 .

    • Django 1.5仍允许您使用用户配置文件 . 因此,如果您可以使用已弃用的功能,您仍然可以将Django-CMS 2.4和Django 1.5与用户配置文件一起使用,而不是使用自定义用户模型 . (我在这里误读了Django文档,并认为Django 1.5不支持用户配置文件 . )

    • 您通常可以在没有用户配置文件或自定义用户模型的情况下离开 - 它们最适合用于添加专门用于用户身份验证的数据 . 相反,您可以使用与 User 具有一对一关系的另一个模型,并使用反向关系来访问它 .

    对于我的情况,我将在短期内使用#3,在长期运行中使用#4 .

    希望有所帮助!

相关问题