Django: использовать пользовательский класс для request.user? - PullRequest
7 голосов
/ 12 ноября 2009

Я расширил класс пользователя по умолчанию в Django следующим образом:

class CustomUser(User):
    friends = models.ManyToManyField('self', symmetrical=False)

Но теперь я хочу использовать это везде вместо стандартного User класса. В моих методах просмотра у меня есть доступ к request.user, но это экземпляр класса User. Какой самый простой способ заставить его вернуть CustomUser вместо

Ответы [ 4 ]

6 голосов
/ 16 ноября 2009

Вы также можете «обезьянить патч» существующей модели User где-то в вашем models.py, и она должна просто работать. В вашем коде просто продолжайте использовать оригинальный класс.

User.add_to_class('friends',models.ManyToManyField('self', symmetrical=False))
5 голосов
/ 12 ноября 2009

Я не уверен, что вы можете сделать это точно, но вы можете получить доступ к своим атрибутам CustomUser, используя функцию Django user_profile.

В ваших настройках.py:

AUTH_PROFILE_MODULE = 'myapp.CustomUser'

На ваш взгляд:

user_friends = user.get_profile().friends

Проверьте эту ссылку для получения дополнительной информации.

3 голосов
/ 12 ноября 2009

Это все объясняется здесь . Проблема request.user была решена с помощью бэкэнда аутентификации. Я реализовал пользовательский пользователь в соответствии с инструкциями автора и с тех пор был счастлив.

1 голос
/ 12 ноября 2009

Я думаю, что самым быстрым решением вашей проблемы было бы просто позвонить CustomUser.objects.get(user=user) (это предполагает, что пользователь является атрибутом в вашей модели CustomUser. Я бы сделал следующее:

class CustomUser(models.Model):
    user = models.ForeignKey(User, unique=True)

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

В противном случае вы можете изменить промежуточное программное обеспечение, включив в него CustomUsers вместо пользователей, но я точно не знаю, как это сделать;)

РЕДАКТИРОВАТЬ: Марк упомянул мне, что он предпочел бы использовать наследование, чтобы он мог использовать все пользовательские методы пользователя, что имеет смысл, и поэтому я нашел статью, чтобы красиво решить эту проблему.

Здесь это.

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