models.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from django.contrib.postgres.fields import JSONField
  2. from django.db import models
  3. from .hydrators import dehydrate_value, hydrate_value
  4. class SettingsManager(models.Manager):
  5. def change_setting(self, setting, dry_value=None, wet_value=None):
  6. if dry_value:
  7. return self.filter(setting=setting).update(dry_value=dry_value)
  8. if wet_value:
  9. try:
  10. setting = self.get(setting=setting)
  11. setting.value = wet_value
  12. setting.save(update_fields=["dry_value"])
  13. except Setting.DoesNotExist:
  14. return 0
  15. class Setting(models.Model):
  16. setting = models.CharField(max_length=255, unique=True)
  17. dry_value = models.TextField(null=True, blank=True)
  18. python_type = models.CharField(max_length=255, default="string")
  19. is_public = models.BooleanField(default=False)
  20. is_lazy = models.BooleanField(default=False)
  21. objects = SettingsManager()
  22. @property
  23. def value(self):
  24. return hydrate_value(self.python_type, self.dry_value)
  25. @value.setter
  26. def value(self, new_value):
  27. if new_value is not None:
  28. self.dry_value = dehydrate_value(self.python_type, new_value)
  29. else:
  30. self.dry_value = None
  31. return new_value