向django中的用户添加自定义字段

向django中的用户添加自定义字段

问题描述:

我正在使用Django提供的create_user()函数来创建我的用户。另外我想存储有关用户的其他信息。所以,我想在下面向django中的用户添加自定义字段

http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

给出的指示,但我不能让它为我工作。是否有一个循序渐进的指导,我可以按照这个步骤来为我工作?

此外,一旦我添加了这些自定义字段,我显然需要从它们添加/编辑/删除数据。我似乎无法找到有关如何执行此操作的任何说明。

+1

所以*你*是Django的create_user()函数? :) – 2010-05-22 05:03:01

+1

我以为我是,但不幸我不是:(....只是一个普通的老人..谢谢文法校正斧头。任何想法如何解决我的实际问题? – 2010-05-22 05:20:16

这只是另一种模式。你操纵它完全一样的方式来操纵你碰到的其他模型。

我没有意识到一步一步的(虽然我相信一个坚实的谷歌会产生一些东西)。但是,这是一个快速的过程。

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

+0

我试过了。得到和错误,说明'NoneType'对象没有属性'_default_manager'。 – 2010-05-22 05:39:51

+3

试过了具体什么?你在哪里得到那个错误? – 2010-05-22 05:47:36

+0

创建一个名为UserProfile.py的文件。添加了所需的代码。在settings.py中进行了更改(AUTH_PROFILE_MODULE = 'app.UserProfile')。 我试图保存中间名,例如在行uinfo = user.get_profile() – 2010-05-22 05:54:39

我知道这已经太晚了,从那时起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

+2

此解决方案运行良好,但我不会推荐它,因为许多库不使用'AUTH_USER_MODEL'变量,并假定您使用'用户'对象。 – db0 2015-09-19 16:20:10

recommended way是创建一个新的模型,并给它内置User模型像这样一个OneToOneField()

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 
+0

对我来说,当我创建一个新用户时,会产生一个programmingError,我尝试访问它:“auth_student”不会退出。 – 2017-01-05 11:27:26

+1

选中此链接,https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#extending-the-existing-user-model这是一个更新的版本 – 2017-05-10 01:17:13