models.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from django.contrib.postgres.fields import JSONField
  2. from django.db import models
  3. from . import utils
  4. class SettingsGroupsManager(models.Manager):
  5. def ordered_alphabetically(self):
  6. from django.utils.translation import gettext as _
  7. groups_dict = {}
  8. for group in self.all():
  9. groups_dict[_(group.name)] = group
  10. ordered_groups = []
  11. for key in groups_dict.keys():
  12. ordered_groups.append(groups_dict[key])
  13. return ordered_groups
  14. class SettingsGroup(models.Model):
  15. key = models.CharField(max_length=255, unique=True)
  16. name = models.CharField(max_length=255)
  17. description = models.TextField(null=True, blank=True)
  18. objects = SettingsGroupsManager()
  19. class SettingsManager(models.Manager):
  20. def change_setting(self, setting, dry_value=None, wet_value=None):
  21. if dry_value:
  22. return self.filter(setting=setting).update(dry_value=dry_value)
  23. elif wet_value:
  24. try:
  25. setting = self.get(setting=setting)
  26. setting.value = wet_value
  27. setting.save(update_fields=["dry_value"])
  28. except Setting.DoesNotExist:
  29. return 0
  30. class Setting(models.Model):
  31. group = models.ForeignKey(SettingsGroup, on_delete=models.CASCADE)
  32. setting = models.CharField(max_length=255, unique=True)
  33. name = models.CharField(max_length=255)
  34. description = models.TextField(null=True, blank=True)
  35. legend = models.CharField(max_length=255, null=True, blank=True)
  36. order = models.IntegerField(default=0, db_index=True)
  37. dry_value = models.TextField(null=True, blank=True)
  38. default_value = models.TextField(null=True, blank=True)
  39. python_type = models.CharField(max_length=255, default="string")
  40. is_public = models.BooleanField(default=False)
  41. is_lazy = models.BooleanField(default=False)
  42. form_field = models.CharField(max_length=255, default="text")
  43. field_extra = JSONField()
  44. objects = SettingsManager()
  45. @property
  46. def value(self):
  47. return utils.get_setting_value(self)
  48. @value.setter
  49. def value(self, new_value):
  50. return utils.set_setting_value(self, new_value)
  51. @property
  52. def has_custom_value(self):
  53. return utils.has_custom_value(self)