3

ENV:1.5.1的Django Django的+ CMS 2.4.1 +百日最新+我的自定义应用程序+自定义Django的CMS插件的Django 1.5扩展默认的用户模型或替代它

基本上我可以扩展默认的Django(1.5 .X)等Django Ribbit Tutorial on NetTuts+

替换用户模型 完全定制的模型等的段落Django Dev doc或Django2Scoops例如:“处理用户模型”

为了测试我决定使用子类AbstractUser 从Django2Scoops书中可以看出:“如果你喜欢Django的用户模型,他们就是这样选择这个选项,但是需要额外的..fields。”

但我有以下错误:

notification.noticesetting:“用户”定义与模型 “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指向 。第二个错误(“模型已被换成 out ...”)是您直接参考用户模型 这一事实的副作用。一旦你改变了ForieignKey引用,这第三个 错误将消失。我们已尽了所有努力来确保向新用户模型顺利迁移 ,但透明不可能完全变为 。应用程序编写者需要将其应用程序更新为兼容1.5 。从本质上讲,如果一个Django 1.4应用程序包含一个硬编码的 用户外键引用,它将不会与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

不会被弃用这个代码的东西吗?

谢谢!

+0

https://github.com/divio/django-cms/issues/1798 Django的CMS不会在此刻支持AUTH_USER_MODEL。因此,我能做什么? – Daviddd

回答

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 
1

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

有四种可能的选项:

  1. 如果您需要自定义用户模式,具有比其他的用户名,你需要等待。
  2. 您可以调用自定义用户模型User - 尽管当我尝试这样做,我得到了与相关M2M领域的冲突错误。有关上述链接的更多详细信息可能有助于解决此问题。
  3. Django 1.5仍然允许您使用用户配置文件。因此,如果您对使用弃用功能还是可以的,仍然可以使用Django-CMS 2.4和Django 1.5以及用户配置文件而不是自定义用户模型。 (我这里误读Django文档,以为用户配置文件没有在Django 1.5的支持。)
  4. 你经常可以脱身没有任何一个用户配置文件或自定义的用户模型 - 他们是最适合用来专门添加的数据进行用户认证。相反,您可以使用另一个与User具有一对一关系的模型,并使用反向关系来访问它。

对我而言,我打算在短期内排名第三,长期排在第四位。

希望有帮助!

+0

感谢赛车蝌蚪!正如你将从长远来看#3和#4一样。文档不是很清楚+ Dajngo2Scoops书中说“选项3:Subclass AbstractBaseUser”:AbstractBaseUser是带有以下内容的基本选项:密码,上次登录并处于活动状态。 1) 您对User模型默认提供的字段(例如名和姓)不满意。 2) 您更喜欢从一个非常简单的干净的平板上创建子类,但想要利用AbstractBaseUser sane默认方法来存储密码。 – Daviddd