首先,這些屬性不會隱藏。假設您的INSTALLED_APPS
中有「django.contrib.auth」和「django.contrib.contenttypes」,那麼您可以訪問您的鏈接中定義的User
模型。有關如何使用/訪問它的文檔,請參閱here。
不過,既然你指定延長的User
模型,我希望你想一些自己的字段添加到它(即使你的榜樣registration_date
存在,並且通過myuser.date_joined
是訪問)。
這樣做的更老,更穩定和更常見的方式與您所擁有的相似。唯一的區別是使用OneToOneField(User)
而不是ForeignKey(User)
。這使得雙方的關係更加方便,強制一方。您確實需要確保爲創建的每個User
創建一個Registration
對象。
實際上,有一個an example正是你想要在OneToOneField的文檔中。
from django.db import models
from django.contrib.auth.models import User
class Registration(models.Model):
user = models.OneToOneField(User)
registration_date = models.DateTimeField(auto_now_add=True)
>>> user = User.objects.get(pk=1)
>>> registration = Registration.objects.create(user=user)
>>> user.registration.registration_date
# Should give the current time
>>> user.get_full_name()
# Should also have all those *hidden* attributes linked above
由於Django的1.5,你可以很容易用自己的自定義用戶模型。此功能的文檔是here。如果您只是添加一些額外的字段,那麼您可以繼承用戶模型並添加您自己的字段。
from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
# We inherit all those nifty things from AbstractUser
registration_date = models.DateTimeField(auto_now_add=True)
然後通過在您的settings.py中添加AUTH_USER_MODEL = 'myapp.MyUser'
來啓用它。我們現在有訪問用戶模式有點不同
>>> from django.contrib.auth import get_user_model()
>>> Users = get_user_model()
>>> user = Users.objects.get(pk=1)
>>> user.registration_date
# Should give the current time
>>> user.get_full_name()
# Should have those 'hidden' attributes
所有這一切都可以extending和substituting下的文件在用戶模式。
但是,我可以從「添加新用戶」表單中輸入這些屬性?例如,您可以在屏幕上看到我只能輸入用戶名和密碼,但我想使用姓名,電子郵件和其他人。這些屬性在默認模型上,所以我不想覆蓋它們。 – Lucio
@Lucio我看到了,你的問題是關於擴展django管理員表單。看看底部[這裏]的完整示例(https://docs.djangoproject.com/en/1)。6/topics/auth/customizing /#extends-user),特別是在「應用程序的admin.py文件中需要下面的代碼」的地方。當我有時間測試它時,我會更新我的帖子。 – kalhartt