2015-01-19 3 views
1

Я создаю приложение, которое использует пользовательскую модель (с помощью метода AbstractBaseUser). Мне удалось написать все соответствующие формы создания пользователей и предоставить пользователям возможность входа в систему. Однако, когда я пытаюсь создать страницу, которая требует информации от текущего пользователя (например, для учетной записи редактирования), я столкнувшись с проблемой. Я пробовал различные методы, такие как request.user, но ни один из них не работает очень хорошо. Когда я пытаюсь использовать этот метод, я получаю TypeError - объект «MyUser» не поддерживает индексирование ».Получение информации о пользователе после входа в Django

У меня есть классы моделей для справки.

Любая помощь будет принята с благодарностью, спасибо заранее.

models.py

class MyUserManager(BaseUserManager): 
    def create_user(self, email, date_of_birth, password=None): 
     """ 
     Creates and saves a User with the given email, date of 
     birth and password. 
     """ 
     if not email: 
      raise ValueError('Users must have an email address') 

     user = self.model(
      email=MyUserManager.normalize_email(email), 
      date_of_birth=date_of_birth, 
     ) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 

    def create_superuser(self, email, date_of_birth, password): 
     """ 
     Creates and saves a superuser with the given email, date of 
     birth and password. 
     """ 
     u = self.create_user(email=email, 
         password=password, 
         date_of_birth=date_of_birth 
        ) 
     u.is_admin = True 
     u.save(using=self._db) 
     return u 

class MyUser(AbstractBaseUser): 
    email = models.EmailField(
         verbose_name='email address', 
         max_length=255, 
         unique=True, 
        ) 
    first_name = models.CharField(max_length=30) 
    last_name = models.CharField(max_length=40) 
    date_of_birth = models.DateField() 
    course = models.ForeignKey(Course, null=True) 
    location = models.ForeignKey(Location, null=True) 
    interests = models.ManyToManyField(Interest, null=True) 
    bio = models.TextField(blank=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 

    objects = MyUserManager() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['date_of_birth'] 
+0

Где трассировки стека говорят, что исключение поднимается? – mmdeas

+0

В строке кода в views.py. Строка читает 'u = MyUser.objects.get (request.user)' – MrW

ответ

5

Вы не должны загружать пользователь из базы данных. request.user - это все, что вам нужно. Это экземпляр вошедшего MyUser который уже загружен Идент промежуточного слоя:

u = request.user 
+0

Отлично! Это делает работу, просто исправить! Благодарю. – MrW