Кэширование связанного с 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?

Ограничения и другая информация

  1. 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).
  2. Adding custom manager to the Publisher model with get, filter, all doesn't help. all method gets called while related field lookup happens but there is no id in the instance to find the lookup.
  3. The object lookup happens in the related description get.

Есть ли способ изменить поведение без написания пользовательского поля?

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