Добавление пользовательских полей пользователям django
Я использую функцию create_user(), которую Django предоставляет для создания моих пользователей. Также я хочу сохранить дополнительную информацию о пользователях. Поэтому я пробовал следовать инструкциям, приведенным в
http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
но я не могу заставить его работать для меня. Есть ли пошаговое руководство, которое я могу выполнить, чтобы заставить это работать для меня?
Кроме того, как только я добавлю эти настраиваемые поля, мне, очевидно, нужно будет добавлять/редактировать/удалять данные из них. Кажется, я не могу найти инструкции о том, как это сделать.
Ответы
Ответ 1
рекомендуемый способ - создать новую модель и дать ей 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
Ответ 2
Я не знаю о шаг за шагом (хотя я уверен, что надежный Google будет что-то производить). Но вот быстрый способ.
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
при добавлении нового пользователя. Вы можете найти отличный фрагмент с указаниями здесь.
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()
Это все, что нужно сделать. Это не является исчерпывающим, но должно указать вам правильное направление.
Обновление: Обратите внимание, что AUTH_PROFILE_MODULE
устарела с версии 1.5: https://docs.djangoproject.com/en/stable/releases/1.5/#auth-profile-module
Ответ 3
Я знаю, что слишком поздно, и с тех пор Django сильно изменилось, но только для ищущих,
Согласно документации Django, если вы довольны моделью пользователя и просто хотите добавить дополнительные поля, выполните следующие действия:
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
Ответ 4
Это просто еще одна модель. Вы манипулируете им точно так же, как вы манипулируете каждой другой моделью, с которой вы сталкиваетесь.