Задать вопрос
@NyxDeveloper

Как аннотировать количество объектов M2M у ManyToOneRelation поля в queryset?

Я пытаюсь отсортировать список объектов тикетов, внутри которых есть чаты, по количеству непрочитанных сообщений в этих чатах. Читая документацию по агрегации Django окончательно запутался.
Есть модели:
class Ticket(models.Model):
    name = models.CharField(max_length=100)
    user = models.ForignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="tickets")

class Chat(models.Model):
    name = models.CharField(max_length=100)
    participants = models.ManyToManyField(AUTH_USER_MODEL, related_name="chats")
    ticket = models.ForignKey("tickets.Ticket", on_delete=models.CASCADE)

class Message(models.Model):
    user = models.ForignKey(AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True)
    chat = models.ForignKey("tickets.Chat", on_delete=models.CASCADE)
    text = models.TextField()
    read = models.BooleanField(default=False)


Мне нужно отсортировать список тикетов пользователя по количеству непрочитанных сообщений отправленных НЕ ЭТИМ ПОЛЬЗОВАТЕЛЕМ в чатах, где в participants есть этот пользователь в порядке убывания.
Как сделать это не прибегая к RawSQL?
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Сложный Комментировать
Пригласить эксперта
Ответы на вопрос 1
tumbler
@tumbler Куратор тега Django
бекенд-разработчик на python
Модель данных некорректная. Сообщение должно становиться прочитанным для конкретного участника чата, а у вас - для всех сразу. И лучше трекать дату первого непрочитанного + количество в модели "участника" - тогда всё сильно проще.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы