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

Gau*_*rma 26 python django

我正在使用Django提供的create_user()函数来创建我的用户.另外,我想存储有关用户的其他信息.所以我尝试按照给出的说明进行操作

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

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

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

rig*_*nmr 23

建议的方法是创建一个新的模型,并给它一个OneToOneField()具有内置的User像这样的模型:

class Student(models.Model):
    user = models.OneToOneField(User)
    college = models.CharField(max_length=30)
    major = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)

等等

然后你可以访问这样的字段:

user = User.objects.get(username='jsmith')
college = user.student.college
Run Code Online (Sandbox Code Playgroud)


Jas*_*ebb 18

我不知道一步一步(虽然我确信一个坚实的谷歌会产生一些东西).但这是一个快速的去做.

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)
Run Code Online (Sandbox Code Playgroud)

2)settings.py通过添加此行(使用适当的名称)来告诉您有关新课程的信息:

AUTH_PROFILE_MODULE = "myapp.UserProfile"
Run Code Online (Sandbox Code Playgroud)

3)添加信号监听器以UserProfile在添加新用户时创建空白记录.你可以在这里找到一个很棒的方向片段.

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()
Run Code Online (Sandbox Code Playgroud)

这就是它的全部.这不是全面的,但应该指向正确的方向.

更新:请注意,AUTH_PROFILE_MODULE自v1.5起不推荐使用:https://docs.djangoproject.com/en/1.5/ref/settings/#auth-profile-module

  • 试过具体什么?你在哪里得到那个错误? (3认同)

Sad*_*egh 11

我知道现在为时已晚,Django自此以后发生了很大变化,但仅限于寻求者,

根据Django文档,如果您对User模型感到满意并且只想添加一些额外的字段,请执行以下操作:

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']
Run Code Online (Sandbox Code Playgroud)

2-添加到 setting.py

AUTH_USER_MODEL = 'myapp.CustomUser'
Run Code Online (Sandbox Code Playgroud)

完成了!

现在你可以跑了 python manage.py syncdb

  • 这个解决方案运行良好,但我不推荐它,因为许多库不使用`AUTH_USER_MODEL`变量并假设您使用`User`对象. (2认同)

Ign*_*ams -8

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