django 1.5 扩展默认用户模型或替换它
Posted
技术标签:
【中文标题】django 1.5 扩展默认用户模型或替换它【英文标题】:django 1.5 extend the default User model or substitute it 【发布时间】:2013-05-12 09:50:18 【问题描述】:环境:Django 1.5.1 + Django CMS 2.4.1 + Zinnia latest + 我的自定义应用程序 + 自定义 Django CMS 插件
基本上我可以扩展默认的 Django (1.5.X) 用户模型 喜欢Django Ribbit Tutorial on NetTuts+
或
替换完全自定义的模型,如Django Dev doc 或段落中的 Django2Scoops 示例:“处理用户模型”
为了测试我决定使用子类 AbstractUser 来自 Django2Scoops 书:“如果您喜欢 Django 的用户模型字段,请选择此选项,但需要额外的 ..fields。”
但我有以下错误:
notification.noticesetting: 'user' 定义与模型的关系 'auth.User',已被换掉。更新与点的关系 在 settings.AUTH_USER_MODEL。 cmsplugin_zinnia.latestentries 插件: “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。第二个错误(“模型已被交换 out...") 是您直接引用的事实的副作用 用户模型。一旦您更改了 ForieignKey 引用,这第三个 错误会消失。我们已尽一切努力确保顺利 过渡到新的用户模型,但不能完全 透明。应用程序编写者需要将他们的应用程序更新为 1.5 兼容的。本质上,Django 1.4 应用程序不会 100% 兼容 如果 Django 1.5 包含硬编码的外键引用 用户。请问,你能给我更多的例子吗?
还有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/ 了解详情。
但我不明白我该如何解决这个问题。
我需要什么:
-用户链接到学院类(一个学院 -> 更多用户)
-用户或机构可以有不同的权限,看到不同的django cms 页面/插件。
-用户的多个字段。
子类 AbstractUser 是否正确?
如何解决“换出”错误?
我应该创建类似于OpenTreeMap Code的东西
这段代码没有被弃用吗?
谢谢!
【问题讨论】:
github.com/divio/django-cms/issues/1798 django CMS 目前不支持 AUTH_USER_MODEL。因此,我该怎么办? 【参考方案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
【讨论】:
【参考方案2】:这是我对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。
希望有帮助!
【讨论】:
感谢赛车蝌蚪!正如你一样,从长远来看,我将选择#3 和#4。文档不是很清楚 + Dajngo2Scoops 书说“选项 3:子类 AbstractBaseUser”:AbstractBaseUser 是基本选项:密码,上次登录,并且是活动的。 1) 你对 User 模型默认提供的字段不满意,例如名字和姓氏。 2)您更喜欢从一个非常简单的干净石板中进行子类化,但希望利用 AbstractBaseUser 理智的默认方法来存储密码。以上是关于django 1.5 扩展默认用户模型或替换它的主要内容,如果未能解决你的问题,请参考以下文章