首先,这些属性不会隐藏。假设您的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