@Egegey

Можно ли аннотированному полю назначить не простое значение(str, int, False, ...), а объект модели?

class Chat(models.Model):

    def last_message(self):
        return self.messages.last()

class Message(models.Model):
        chat = models.ForeignKey(Chat, on_delete=models.CASCADE, related_name='messages')
        text = models.TextField()


Я пытаюсь избавиться от метода "last_message", чтобы запрос всех чатов не опрашивал базу для каждого чата.
Можно ли добавить аннотированное поле (и заменить метод), чтобы в нём содержался объект сообщения?

Максимум что смог это сделать, это поправить "prefetch_related" для чата:
Chat.objects.prefetch_related(Prefetch('messages', queryset=last_messages)

В переменной 'last_messages' хранится queryset состоящий из одного объекта - последнего сообщения.
Но всё равно, чтобы его получить нужно сделать запрос в базу.
  • Вопрос задан
  • 59 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы