models.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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:
  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. if 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. # DELETE
  32. group = models.ForeignKey(SettingsGroup, on_delete=models.CASCADE)
  33. setting = models.CharField(max_length=255, unique=True)
  34. # DELETE
  35. name = models.CharField(max_length=255)
  36. # DELETE
  37. description = models.TextField(null=True, blank=True)
  38. # DELETE
  39. legend = models.CharField(max_length=255, null=True, blank=True)
  40. # DELETE
  41. order = models.IntegerField(default=0, db_index=True)
  42. dry_value = models.TextField(null=True, blank=True)
  43. default_value = models.TextField(null=True, blank=True)
  44. python_type = models.CharField(max_length=255, default="string")
  45. is_public = models.BooleanField(default=False)
  46. is_lazy = models.BooleanField(default=False)
  47. # DELETE
  48. form_field = models.CharField(max_length=255, default="text")
  49. # DELETE
  50. field_extra = JSONField()
  51. objects = SettingsManager()
  52. @property
  53. def value(self):
  54. return utils.get_setting_value(self)
  55. @value.setter
  56. def value(self, new_value):
  57. return utils.set_setting_value(self, new_value)
  58. @property
  59. def has_custom_value(self):
  60. return utils.has_custom_value(self)