我正在使用Django提供的create_user()函数来创建我的用户。另外,我想存储有关用户的其他信息。所以我尝试按照
中的说明进行操作http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
但我无法让它为我工作。是否有一个循序渐进的指南,我可以遵循以使其适合我?
此外,一旦我添加了这些自定义字段,我显然需要添加/编辑/删除它们中的数据。我似乎无法找到有关如何执行此操作的任何说明。
答案 0 :(得分:21)
recommended way是创建一个新模型并为其提供OneToOneField()
内置User
模型,如下所示:
class Student(models.Model):
user = models.OneToOneField(User)
college = models.CharField(max_length=30)
major = models.CharField(max_length=30)
等
然后你可以访问这样的字段:
user = User.objects.get(username='jsmith')
college = user.student.college
答案 1 :(得分:17)
我不知道一步一步(虽然我确信一个坚实的谷歌会产生一些东西)。但是这里有一个快速的方法。
1)创建UserProfile
模型以保存额外信息并将其放入models.py
。它可能看起来像这样:
class UserProfile(models.Model):
#required by the auth model
user = models.ForeignKey(User, unique=True)
middle_name = models.CharField(max_length=30, null=True, blank=True)
2)通过添加此行(使用适当的名称)告诉您settings.py
有关新课程的信息:
AUTH_PROFILE_MODULE = "myapp.UserProfile"
3)添加信号监听器以在添加新用户时创建空白UserProfile
记录。你可以找到一个方向为here的精彩片段。
4)处理新用户记录时,您也可以填充UserProfile
记录。这是我如何插入(注意get_profile):
if (form.is_valid()):
cd = form.cleaned_data
user = User.objects.create_user(cd["UserName"], cd["Email"], cd["Password"])
user.first_name = cd["FirstName"]
user.last_name = cd["LastName"]
user.save()
#Save userinfo record
uinfo = user.get_profile()
uinfo.middle_name = cd["MiddleName"]
uinfo.save()
这就是它的全部。这并不全面,但应该指出正确的方向。
更新:请注意,自v1.5以来AUTH_PROFILE_MODULE
已被弃用:https://docs.djangoproject.com/en/1.5/ref/settings/#auth-profile-module
答案 2 :(得分:11)
我知道现在为时已晚,Django从那以后发生了很大变化,但仅限于寻求者,
根据Django documentation,如果您对用户模型感到满意并且只想添加一些额外的字段,请执行以下操作:
1-您的models.py
应该是这样的:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
mobile = models.CharField(max_length=16)
# if your additional field is a required field, just add it, don't forget to add 'email' field too.
# REQUIRED_FIELDS = ['mobile', 'email']
2-将此添加到setting.py
AUTH_USER_MODEL = 'myapp.CustomUser'
完成!
现在您可以运行python manage.py syncdb
答案 3 :(得分:-2)
这只是另一种模式。您操纵它的方式与操纵您遇到的每个其他模型的方式完全相同。