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

时间:2010-05-22 04:49:18

标签: python django

我正在使用Django提供的create_user()函数来创建我的用户。另外,我想存储有关用户的其他信息。所以我尝试按照

中的说明进行操作

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

但我无法让它为我工作。是否有一个循序渐进的指南,我可以遵循以使其适合我?

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

4 个答案:

答案 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)

这只是另一种模式。您操纵它的方式与操纵您遇到的每个其他模型的方式完全相同。