Django аннотация с динамическим значением

Здравствуйте в моей модели есть свойство, которое полностью находится в кэше, а не в базе данных

class Model(models.Model):
    
    ....

    @property
    def _get_last_seen_cache_name(self) -> str:
        return f'{self.hostname.upper()}_last_seen'

    @property
    def last_seen(self) -> datetime | None:
        cached = cache.get(self._get_last_seen_cache_name, None)
        if isinstance(cached, datetime):
            return cached
        return None

    def update_last_seen(self) -> None:
        cache.set(self._get_last_seen_cache_name, get_now().replace(microsecond=0), None)

Как я могу аннотировать это значение last_seen queryset. Хочу использовать сортировку по этому столбцу на странице администратора. Но для этого мне нужно получить значения из кэша на аннотации, выполнить cache.get() с соответствующим именем ключа. Что-то вроде этого, не работающий пример:

queryset = super().get_queryset(request)
queryset = queryset.annotate(last_seen=Value(cache.get(Concat('hostname', Value('_last_seen')))), CharField()))

или

queryset = queryset.annotate(last_seen=Value(cache.get(f"{F('hostname')_last_seen}")), CharField()))

Я могу аннотировать буквальное значение, но как аннотировать динамическое значение, которое не существует в базе данных, а только в кэше или в памяти? Как сделать подстановку имени хоста в функции?

Вернуться на верх