Как получить текущего пользователя в 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)
→ Ссылка