fix: singleton load and save
This commit is contained in:
+10
-2
@@ -1,5 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
|
from django.forms.models import model_to_dict
|
||||||
|
|
||||||
|
|
||||||
class SingletonModel(models.Model):
|
class SingletonModel(models.Model):
|
||||||
@@ -7,16 +8,23 @@ class SingletonModel(models.Model):
|
|||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
cache_key = f"{self._meta.model_name}_singleton_key"
|
||||||
self.pk = 1
|
self.pk = 1
|
||||||
super(SingletonModel, self).save(*args, **kwargs)
|
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):
|
def delete(self, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load(cls):
|
def load(cls):
|
||||||
cache_key = f"{cls._meta.model_name}_singleton_key"
|
cache_key = f"{cls._meta.model_name}_singleton_key"
|
||||||
if not (data := cache.get(cache_key)):
|
data = cache.get(cache_key)
|
||||||
data = cls.objects.values().get(pk=1)
|
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)
|
cache.set(cache_key, data, 60 * 60 * 24)
|
||||||
return cls(**data)
|
return cls(**data)
|
||||||
|
|||||||
Reference in New Issue
Block a user