from django.db import models from django.core.cache import cache from django.forms.models import model_to_dict class SingletonModel(models.Model): class Meta: abstract = True def save(self, *args, **kwargs): cache_key = f'{self._meta.model_name}_singleton_key' self.pk = 1 super(SingletonModel, self).save(*args, **kwargs) # Reset cache data = model_to_dict(self) cache.set(cache_key, data, 60 * 60 * 24) def delete(self, *args, **kwargs): pass @classmethod def load(cls): cache_key = f'{cls._meta.model_name}_singleton_key' data = cache.get(cache_key) if not data: instance, created = cls.objects.get_or_create(pk=1) data = model_to_dict(instance) cache.set(cache_key, data, 60 * 60 * 24) return cls(**data)