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