Как получить текущего пользователя в models.py
Требуется получить текущего пользователя в models.py:
class Dialog(models.Model):
# Модель
def get_msg(self): # Метод
return Messages.objects.get(dialog=self, user=user # Текущий пользователь)
Как это сделать и можно ли это сделать вообще?
Ответы (2 шт):
У модели нет своего пользователя (если вы не привязали его вручную, конечно). Вы можете получить информацию о пользователе, который делает запрос. Делается это в views.py следующим образом:
def view_name(request):
user = request.user
# мы получили информацию о пользователе, который воспользовался представлением.
Обращаю внимание, что request.user может возвращать как конкретного пользователя, так и None, если человек, производящий запрос к представлению, не авторизирован.
Теперь уже в представлении вы можете сделать запрос к своей модели. Можно сделать что-то вроде этого:
class Dialog(models.Model):
# Модель
def get_msg(self, user): # Метод
return Messages.objects.get(dialog=self, user=user)
Тогда можно при обращении из представления передать пользователя в функцию get_msg
В итоге проблема решилась установкой модуля django-currentuser (https://pypi.org/project/django-currentuser/).
settings.py:
MIDDLEWARE = [
...
'django_currentuser.middleware.ThreadLocalUserMiddleware',
]
models.py
from django_currentuser.middleware import (
get_current_user, get_current_authenticated_user)
class Dialog(models.Model):
# Модель
def get_msg(self): # Метод
user=get_current_user()
return Messages.objects.get(dialog=self, user=user)