Кэширование связанного с Django поля в запущенном процессе Python
class Publisher(models.Model):
name = models.CharField(max_length=200)
class Book(models.Model):
publisher = models.ForeignKey(Publisher, on_delete=models.PROTECT)
name = models.CharField(max_length=255)
Имеется сериализатор DRF, который возвращает книги и издательство, связанное с книгой. Существуют тысячи книг, в то время как издателей всего сотня. Распределение данных составляет 1:1000, и поэтому имеет смысл хранить объекты издателей в кэше приложения Python после первой загрузки до следующего перезапуска приложения.
Как я могу кэшировать publisher
с помощью lru_cache в Python?
Ограничения и другая информация
- I'm already using Django cache with redis backend for other purposes and I don't think redis would give a significant boost(same network call + lookup).
- Adding custom manager to the
Publisher
model withget, filter, all
doesn't help.all
method gets called whilerelated
field lookup happens but there is noid
in the instance to find the lookup. - The object lookup happens in the related description get.
Есть ли способ изменить поведение без написания пользовательского поля?