Подтвердить что ты не робот

Профиль пользователя Django

При добавлении дополнительных полей в профиль пользователя, таких как местоположение, пол, работодатель и т.д., следует ли добавлять дополнительные столбцы в django.contrib.auth.models.User и сохранять его там? Или мне нужно создать новую таблицу для сохранения информации о профиле пользователя?

Кроме того, когда пользователь загружает изображение профиля, должен ли я сохранять его в той же таблице? (Обратите внимание, что это не производственный сервер, я просто делаю это на своем локальном сервере, чтобы разобраться в этом). Спасибо вам

4b9b3361

Ответ 1

Вам нужно создать модель для профиля пользователя:

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.py:

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

Ответ 2

Концептуально OneToOneField похож на ForeignKey с уникальным значением = True, но "обратная" сторона отношения будет напрямую возвращать один объект. Это рекомендуемый способ расширения класса User.

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

Ответ 4

Текущее Django - 1.9, и вот некоторые обновления устаревшего принятого ответа

  • использовать models.OneToOneField(User)
  • добавить related_name='profile'
  • используйте .__str__() и .format() для Python 3

так

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, вы можете легко получить доступ к профилю пользователя, например, для request.user

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

Нет необходимости в дополнительных поисках.

Ответ 5

Начиная с Django 1.5 вы можете заменить пользователя по умолчанию своим пользовательским объектом с помощью простой записи настроек:

AUTH_USER_MODEL = 'myapp.MyUser'

Для получения более подробной информации просмотрите запись документации Django.

Ответ 6

Вот решение, которое я нашел здесь. В основном вы просто расширяете форму по умолчанию UserCreationForm, но сохраняя одно и то же имя. Он прекрасно работает с тем, как Django сообщает вам сделать UserProfiles.

Ответ 7

Ответ может быть обновлен, чтобы добавить приемник сигналов, который создаст профиль, если он не существует, и обновите его, если он уже существует.

@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 post также включает в себя редактирование, список настраиваемых профилей в панели администратора.