2012-07-13 35 views
1

我剛開始一個Django項目(裏面沒有應用程序)。我激活了設置文件中的admin,並可以訪問Django管理頁面。在Django頁面中有一列添加用戶;在添加用戶時,我只能獲得個人信息下的三個字段,但我需要存儲更多關於用戶的信息。我谷歌搜索,發現我可以使用用戶配置文件來完成這一點。我試過了,但我遇到了問題。在Django的用戶個人信息中添加字段管理頁面

我的目標是三個字段添加到用戶表:

  1. 作用
  2. 聯繫電話
  3. 其他

我需要一個像詳細信息:哪些功能我需要寫和在哪裏做到這一點。我發現this,但我不知道在哪裏寫這些步驟。我將不勝感激對此的更加清楚的解釋。

回答

3

Django用戶配置文件是你需要的。您鏈接到的博客有明確的步驟如何做到這一點。你可以查看Django文檔。 http://www.turnkeylinux.org/blog/django-profile也提供了很好的解釋。 基本上你需要用User作爲ForeignKey創建一個新模型,並將settings.py中的模型定義爲AUTH_PROFILE_MODULE = "django_app.your_profile_modelname"。創建配置文件並將其保存爲與任何其他型號一樣,並使用user.get_profile()

在回答以下問題時添加以下幾項內容: 首先,不要將應用程序創建爲目錄。按照此處所述使用startapp <appname> [destination]。這將創建應用程序目錄。 其次,您必須將該應用程序添加到項目的設置文件中的INSTALLED_APPS,然後執行syncdb。基本上,請按照Django tutorial on writing your first app中的步驟操作。 三,UserProfile是一個單獨的模型。它不是User的擴展。它僅與User相關,因爲您將User添加爲ForeignKey。 第四,爲了能夠在管理員中看到用戶個人資料模型,您完全可以做到do to add any other model to admin page。與您的應用程序下創建一個文件名admin.py

from django.contrib import admin 
from myproject.app.models import UserProfile 
admin.site.register(UserProfile) 
+0

由您和turkeylinux網站所描述的,我創建了一個名爲下了一個名爲應用models.py一個文件,然後添加AUTH_PROFILE_MODULE =「mysite.apps.UserProfile」在這裏我網站上的項目名稱,應用程序是mysite的目錄中的目錄,這個程序目錄內我創造具有django.db進口機型以下內容 – xrage 2012-07-13 15:25:28

+0

從django.contrib.auth.models導入文件models.py用戶 類用戶配置(models.Model): 用戶= models.ForeignKey (User,unique = True) url = models.URLField(「Website」,blank = True) company = models.CharField(max_length = 50,blank = True) User.profile = property(lambda u:UserProfile。 OBJ ects.get_or_create(user = u)[0]) 然後使用命令來同步數據庫,之後,我再次檢查我的管理頁面沒有額外的可用字段。我仍然得到相同的三個字段的名字,姓氏和電子郵件。我的目標是在數據庫中添加更多的字段並使用管理頁面填充。 – xrage 2012-07-13 15:31:44

+0

你在管理頁面的'UserProfile'模型中看到了哪些字段?您已將字段添加到'UserProfile',而不是'User'。因此,它們將在'UserProfile'模型下可見。 – zaphod 2012-08-06 19:32:43

1

有三個關鍵的概念理解:

  1. 沒有內置在Django的「檔案」系統,超越有限auth應用程序,它是真正適合用戶登錄。預計你會推出自己的產品。
  2. 在自己的檔案記錄中沒有什麼不可思議的,它就像其他任何以User作爲外鍵(或更合適的是,one-to-one field as per the docs)的記錄一樣。您可以通過創建自定義django應用(傳統上稱爲profiles)和該應用的模型(傳統上稱爲UserProfile,因爲不允許Profile作爲模型名稱)來創建它。
  3. UserProfile設置爲模型的唯一方法是將其指定爲AUTH_PROFILE_MODULE,這意味着在User記錄上調用.get_profile()時可以訪問它。而已。如果設置了UserProfile像這樣:

    def UserProfile(models.Model): 
        user = models.OneToOneField(User, related_name='profile') 
        other fields 
    

    那麼你也可以訪問配置文件爲user.profile,而不是user.get_profile()其中有些人喜歡。

再一次,沒有什麼神奇的配置文件模型 - 它只是一個模型記錄像任何其他模型的記錄。

如果您希望能夠編輯更復雜的用戶表單中的其他字段;最簡單的方法很可能取消註冊User,然後使用您的自定義ModelAdmin和表單類再次註冊它,但根據您的問題來判斷,您可能尚未達到該級別。

相關問題