from django.core.cache import cache
[docs]def generate_key(model, pk, related=None):
if related:
return '{}.{}.{}-{}'.format(model._meta.app_label, model._meta.model_name, related, pk)
return '{}.{}-{}'.format(model._meta.app_label, model._meta.model_name, pk)
[docs]def get_or_set(model, pk):
key = generate_key(model, pk)
obj = cache.get(key)
if not obj:
obj = model.objects.get(pk=pk)
cache.set(key, obj)
return obj
[docs]def get(model, pk):
key = generate_key(model, pk)
return cache.get(key)
[docs]def delete(model, instance, related=None):
key = generate_key(model, instance.pk, related)
cache.delete(key)
[docs]def set(obj):
key = generate_key(obj._meta.model, obj.pk)
cache.set(key, obj)