我只是找了EveryBlock的源代碼,我發現這個代碼在警報/ models.py代碼:Django中的屬性緩存 - 有什麼意義?
def _get_user(self):
if not hasattr(self, '_user_cache'):
from ebpub.accounts.models import User
try:
self._user_cache = User.objects.get(id=self.user_id)
except User.DoesNotExist:
self._user_cache = None
return self._user_cache
user = property(_get_user)
我注意到周圍一堆這種模式,但我不太明白使用。整個想法是確保在自己訪問FK(self = alert對象)時,你只需從db中獲取一次用戶對象?爲什麼你不只是依靠db緩存和django的ForeignKey()字段?我注意到模型定義只包含用戶標識而不包含外鍵字段:
class EmailAlert(models.Model):
user_id = models.IntegerField()
...
任何見解將不勝感激。