Добавление пользовательских полей для пользователей в Django - PullRequest
25 голосов
/ 22 мая 2010

Я использую функцию create_user (), которую Django предоставляет для создания моих пользователей. Также я хочу хранить дополнительную информацию о пользователях. Поэтому я попытался следовать инструкциям, приведенным на

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

но я не могу заставить его работать на меня. Есть ли пошаговое руководство, которому я могу следовать, чтобы заставить его работать на меня?

Кроме того, как только я добавлю эти пользовательские поля, мне, очевидно, потребуется добавить / отредактировать / удалить данные из них. Я не могу найти какие-либо инструкции о том, как это сделать.

Ответы [ 4 ]

22 голосов
/ 23 декабря 2015

Рекомендуемый способ - создать новую модель и присвоить ей 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
17 голосов
/ 22 мая 2010

Я не знаю, шаг за шагом (хотя я уверен, что надежный 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/1.5/ref/settings/#auth-profile-module

11 голосов
/ 27 марта 2014

Я знаю, что уже слишком поздно, и с тех пор Джанго сильно изменился, но только для ищущих,

Согласно документации 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

0 голосов
/ 22 мая 2010

Это просто другая модель. Вы манипулируете им точно так же, как вы манипулируете любой другой моделью, с которой вы сталкиваетесь.

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