Задать вопрос
@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 состоящий из одного объекта - последнего сообщения.
Но всё равно, чтобы его получить нужно сделать запрос в базу.
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
  • Яндекс Практикум
    Мидл Python-разработчик
    6 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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