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

Добавление пользовательских полей пользователям django

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

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

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

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

4b9b3361

Ответ 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

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