3

环境:Django 1.5.1 + Django CMS 2.4.1 + Zinnia latest + 我的自定义应用程序 + 自定义 Django CMS 插件

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

或者

在段落中替换完全自定义的模型,例如Django Dev doc或 Django2Scoops 示例:“处理用户模型”

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

但我有以下错误:

notification.noticesetting: 'user' 定义了与模型 'auth.User' 的关系,该模型已被换出。更新指向 settings.AUTH_USER_MODEL 的关系。cmsplugin_zinnia.latestentriesplugin:“作者”定义了与模型“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 的关系。

经过数小时的阅读和测试,我发现

指定自定义用户模型(扩展 AbstractUser)不起作用

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

Django/Python:更新指向 settings.AUTH_USER_MODEL 的关系

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

但我不明白我该如何解决这个问题。

我需要什么:

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

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

- 用户的更多字段。

子类 AbstractUser 是正确的点吗?

如何解决“换出”错误?

我应该创建类似于OpenTreeMap 代码的东西

不推荐使用此代码吗?

谢谢!

4

2 回答 2

5

有非常简单的解决方案。只需在导入 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
于 2013-07-02T17:16:57.860 回答
1

这是我对https://github.com/divio/django-cms/issues/1798上进一步讨论的总结。

有四种可能的选择:

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

就我而言,我将在短期内选择#3,在长期内选择#4。

希望有帮助!

于 2013-05-23T00:28:17.877 回答