#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)