Могу ли я предложить другое решение?Почему бы не сохранить счет и не сделать его автоматическим приращением / уменьшением с помощью сигналов?
Это зависит от количества операций чтения / записи, которые вы имеете, но кэширование чего-то подобного, вероятно, является более эффективным решением.И возможно немного проще.
В любом случае, вы правильно кэшируете счет.Объект Invoice
не должен устаревать, если вы не кешируете его каким-либо другим способом.Этот кеш привязан к экземпляру, и с новым запросом вы можете предположить, что вы также получите новый экземпляр.Если вы не получаете свои предметы из memcached, то есть.
Что касается инъекции в кеш при необходимости.Как это будет работать, если вы используете get()
или filter()
?В этом случае ваш счет будет ниже, а ваш кэш неверен.Это должно быть вполне выполнимо для all()
.Вы можете просто перезаписать менеджер по умолчанию, чтобы автоматически добавлять эти данные во время выборки.Но это будет означать, что для каждого Item
, который вы запрашиваете, ваш Invoice
будет также выбран.