2016-01-27 1 views
1

СВЯЗАННЫЕ: get user profile in djangoДжанго: Профиль в 1.9

Выше показано, как получить профиль пользователя, но я читал, что принятый метод ответа осуждается.

Как создать/получить/использовать профиль пользователя в django 1.9?

+0

Возможный дубликат [метода Django получить \ _profile() не работает на расширенной модели пользователя] (http://stackoverflow.com/questions/13183264/django-get- profile-method-not-working-on-extended-user-model) – Sayse

+0

Прокрутите вниз до второго ответа на дубликат ... (отказ от ответственности: его мину) – Sayse

+1

@ Запустите работу .userprofile. спасибо – ealeon

ответ

8

models.py

from django.contrib.auth.models import User 
from django.db.models.signals import post_save 

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


def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

Приведенный выше код создаст UserProfile запись всякий раз, когда новый пользователь создается на Пользователь стол. Затем вы можете получить доступ к деталям в профиле, как,

address = request.user.profile.address 
+0

, похоже, он работает с адресом = request.user.userprofile.address. Итак, когда пользовательский объект создается, как вы инициализируете/устанавливаете значение адреса? – ealeon

+0

ах я только что инициализировал его в созданном блоке, и он работает – ealeon

1

get_profile() метод возвратил дополнительную информацию о пользователе. В настоящее время эти данные могут храниться в пользовательской модели пользователя или в отдельной модели, которая связана с пользовательской моделью. Вы можете сделать это на simply adding one2one relation with User model to your custom User model, или by subclassing the AbstructUserBase model.

подклассов Пример пользователя Модель:

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
     verbose_name='email address', 
     max_length=255, 
     unique=True, 
    ) 
    date_of_birth = models.DateField() 
    ... 

One2One связь с моделью пользователя, например:

from django.contrib.auth.models import User 

class Employee(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    department = models.CharField(max_length=100)