Фильтрация непросмотренных сообщений в Python Django

У меня есть две модели, ChatBox и Message. Я хочу просмотреть все чаты и отобразить их, и я хочу отобразить количество непросмотренных сообщений (модель Message находится в связи с внешним ключом) для каждого чата.

Мог бы кто-нибудь помочь мне сделать это, поскольку я бьюсь над этим уже несколько часов.

Сначала я хотел передавать каждый объект из цикла в фильтры/теги django и добавлять к нему счетчик непросмотренных сообщений, но мне посоветовали использовать objects.annotation. Однако я не могу найти, как реализовать ни один из этих способов.

Вот мое представление, которое отображает входящие сообщения:

class InboxView(LoginRequiredMixin, ListView):
  model = ChatBox
  template_name = 'chat/inbox.html'

  def get_queryset(self):
    # getting all chats for a request.user
    object_list = ChatBox.objects.filter(Q(user1=self.request.user) \
    | Q(user2=self.request.user)).all()
    return object_list

Вот мои модели:

class ChatBox(models.Model):
    user1  = models.ForeignKey(CustomUser, 
    on_delete=models.CASCADE, related_name='user1')
    user2  = models.ForeignKey(CustomUser, 
    on_delete=models.CASCADE, related_name='user2')
    slug = models.SlugField(_("Slug"), max_length=255, unique=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

class Message(models.Model):
  chat = models.ForeignKey(ChatBox, on_delete=models.CASCADE)
  sender = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='sender')
  body = models.TextField()
  created = models.DateTimeField(auto_now_add=True)
  updated = models.DateTimeField(auto_now=True)
  seen = models.BooleanField(default=False)
Вернуться на верх