Если у вас есть несколько запущенных процессов или несколько компьютеров, работающих с одной и той же базой данных, то, конечно, вы не сможете уменьшить количество запросов, выполняющих это.
Одна вещь, которую вы можете попытаться сделать, - использовать локальное хранилище для хранения глобального «кэша» пользователей. Как пример:
class UserStorage(threading.local):
store = {}
def getIsland(self, request):
user_id = request.user.pk
island = store.get(user_id)
if island is None:
island, created = Island.objects.get_or_create(user = user_id)
store[user_id] = island
island.update()
return island
Однако вы можете заметить, что объект Island НИКОГДА НЕ ОБНОВЛЯЕТСЯ. Поэтому вы должны действовать с особой осторожностью. Возможно, вам понадобится глобальное время ожидания для этого объекта, но затем вы реализуете свое собственное решение для кеширования, так почему бы не использовать систему кеширования django с memcached или их локально-кеш-память?