Как получить текущего пользователя для поля модели

#django #django-models

#django #django-модели

Вопрос:

Для следующего unread определения, как я могу заставить текущего пользователя иметь возможность подсчитывать количество потоков сообщений, которые имеет данный пользователь?

 class MessageThread(models.Model):
    subject = models.CharField(max_length=256, blank=False)

    def unread(self):
        return self.objects.filter(***messagerecipient__recipient='current user'***).distinct().count()

class MessageRecipient(models.Model):
    message = models.ForeignKey(Message)
    recipient = models.ForeignKey(User)
    status = models.CharField(max_length=20, choices=MESSAGE_STATUS, default="unread")
  

Комментарии:

1. unread() должен быть метод в менеджере, а не в модели.

Ответ №1:

Вы должны передать запрос методу:

 def unread(self, request):
    return self.objects.filter(messagerecipient__recipient=request.user).distinct().count()
  

но это не имеет смысла, поскольку вы вызываете метод модели (который работает с определенными строками, то есть с одним потоком сообщений) — вам следует написать диспетчер моделей для работы со всей таблицей (т. Е. Найти Все непрочитанные потоки в таблице MessageThread)

 class MessageThreadManager(models.Manager):
    def get_unread_threads(self, user):
        return self.objects.filter(messagerecipient__recipient=user).distinct()

class MessageThread(models.Model):
    objects = MessageThreadManager()
  

итак, теперь вы можете вызвать:

 unread_threads = MessageThread.objects.get_unread_threads(some_user_obj)