base.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from django import forms
  2. from ...cache import clear_settings_cache
  3. class ChangeSettingsForm(forms.Form):
  4. settings = []
  5. def __init__(self, *args, **kwargs):
  6. self.request = kwargs.pop("request")
  7. super().__init__(*args, **kwargs)
  8. def save(self, settings):
  9. self.save_settings(settings)
  10. self.clear_cache()
  11. def save_settings(self, settings):
  12. for setting in self.settings:
  13. setting_obj = settings[setting]
  14. new_value = self.cleaned_data.get(setting)
  15. if setting_obj.python_type == "image":
  16. if new_value and new_value != self.initial.get(setting):
  17. self.save_image(setting_obj, new_value)
  18. elif self.cleaned_data.get("%s_delete" % setting):
  19. self.delete_image(setting_obj)
  20. else:
  21. self.save_setting(setting_obj, new_value)
  22. def delete_image(self, setting):
  23. if setting.image:
  24. setting.image.delete()
  25. def save_image(self, setting, value):
  26. if setting.image:
  27. setting.image.delete(save=False)
  28. setting.value = value
  29. setting.save()
  30. def save_setting(self, setting, value):
  31. setting.value = value
  32. setting.save()
  33. def clear_cache(self):
  34. clear_settings_cache()