Django用户configuration文件

当添加额外的字段到用户configuration文件,如位置,性别,雇主等,我应该添加额外的列django.contrib.auth.models.User并保存在那里? 或者我应该创build一个新的表来保存用户configuration文件信息?

此外,当用户上传个人资料图片,我应该保存在同一个表? (注意,这不是一个生产服务器,我只是在我的本地runserver上做这件事情)。 谢谢

你必须为用户configuration文件build立一个模型:

 class UserProfile(models.Model): user = models.ForeignKey(User, unique=True) location = models.CharField(max_length=140) gender = models.CharField(max_length=140) employer = models.ForeignKey(Employer) profile_picture = models.ImageField(upload_to='thumbpath', blank=True) def __unicode__(self): return u'Profile of user: %s' % self.user.username 

然后在settings.pyconfiguration:

 AUTH_PROFILE_MODULE = 'accounts.UserProfile' 

从概念上讲,OneToOneField类似于具有unique = True的ForeignKey,但是关系的“反向”侧将直接返回单个对象。 这是扩展用户类的推荐方式。

 class UserProfile(models.Model): user = models.OneToOneField(User) ... 

Django提供了一种在单独的表 (称为用户configuration文件)中存储有关用户的附加信息的方法。

目前的Django是1.9,这里是对过时的接受的答案的一些更新

  1. 使用models.OneToOneField(User)
  2. add related_name='profile'
  3. 对Python 3使用.__str__().format()

像这样

 class UserProfile(models.Model): user = models.OneToOneField(User, related_name='profile') location = models.CharField(max_length=140) gender = models.CharField(max_length=140) ... def __str__(self): return 'Profile of user: {}'.format(self.user.username) 

使用related_name可以轻松访问用户的configuration文件,例如request.user

 request.user.profile.location request.user.profile.gender 

不需要额外的查找。

从Django 1.5开始,您可以使用一个简单的设置条目来将默认用户replace为您的自定义用户对象:

 AUTH_USER_MODEL = 'myapp.MyUser' 

有关更多详细信息,请查看此Django文档条目 。

有一个解决scheme,我在这里find。 基本上你只是扩展默认的formsUserCreationForm但保持相同的名称。 它可以与Django的文档告诉你做UserProfiles的方式无缝地工作。

答案可以更新添加信号接收器,如果它不存在,将创buildconfiguration文件,如果已经存在,则更新。

@receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) instance.profile.save()

这个https://simpleisbetterthancomplex.com/tutorial/2016/11/23/how-to-add-user-profile-to-django-admin.html文章还包括如何编辑,列出pipe理面板中的自定义configuration文件。