嗨,在我的模型中,我的属性完全在缓存中,而不是在数据库中
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()))
I can annotate with literal value, but how annotate with dynamic value, that doesnt exist in database, but in cache 或 in mem或y only? How to do hostname substitution in a function?