Luc*_*cio 0 python django model
我正在尝试像这样实现Users类django.contrib.auth.models:
from django.db import models
from django.contrib.auth.models import User
class Registration(models.Model):
'''Represents a user registration.'''
user = models.ForeignKey(User)
registration_date = models.DateTimeField(auto_now_add=True, help_text='The date of the registration')
def __str__(self):
return '%s - %s' % (self.user, self.registration_date,)
Run Code Online (Sandbox Code Playgroud)
此用户默认启用两个属性:用户名,密码

阅读代码我可以看到有更多属性,如姓名和电子邮件.
如何启用那些隐藏(如果这是正确的)属性?
首先,这些属性不会被隐藏.假设您有"django.contrib.auth"和"django.contrib.contenttypes" INSTALLED_APPS,那么您可以访问User链接中定义的模型.有关如何使用/访问它的文档,请参见此处.
不过,既然你指定的扩展的User模型,我希望你想一些自己的字段添加到它(即使你的例子registration_date存在并且可访问通过myuser.date_joined).
更老,更稳定,更常见的方式与您所拥有的相似.唯一的区别是使用a OneToOneField(User)而不是a ForeignKey(User).这通过强制关系使双向和更方便的关系.您需要确保Registration为每个创建的对象创建一个对象User.
事实上,在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
Run Code Online (Sandbox Code Playgroud)
从Django 1.5开始,您可以非常轻松地使用自己的自定义用户模型.此功能的文档在此处.如果您只是添加一些额外的字段,那么您可以继承User模型并添加自己的字段.
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)
Run Code Online (Sandbox Code Playgroud)
然后通过添加在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |