Фильтрация непросмотренных сообщений в 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)