mirror of
https://github.com/jazzband/django-constance.git
synced 2026-03-16 22:40:24 +00:00
serialize_according_to_widget (#472)
Co-authored-by: Сергей Юрченко <s.yurchenko@softpro.com>
This commit is contained in:
parent
8b34b63fd0
commit
fc6d41fdb3
3 changed files with 43 additions and 3 deletions
|
|
@ -202,11 +202,16 @@ class ConstanceAdmin(admin.ModelAdmin):
|
|||
|
||||
def get_config_value(self, name, options, form, initial):
|
||||
default, help_text = options[0], options[1]
|
||||
field_type = None
|
||||
if len(options) == 3:
|
||||
field_type = options[2]
|
||||
# First try to load the value from the actual backend
|
||||
value = initial.get(name)
|
||||
# Then if the returned value is None, get the default
|
||||
if value is None:
|
||||
value = getattr(config, name)
|
||||
|
||||
form_field = form[name]
|
||||
config_value = {
|
||||
'name': name,
|
||||
'default': localize(default),
|
||||
|
|
@ -214,12 +219,17 @@ class ConstanceAdmin(admin.ModelAdmin):
|
|||
'help_text': _(help_text),
|
||||
'value': localize(value),
|
||||
'modified': localize(value) != localize(default),
|
||||
'form_field': form[name],
|
||||
'form_field': form_field,
|
||||
'is_date': isinstance(default, date),
|
||||
'is_datetime': isinstance(default, datetime),
|
||||
'is_checkbox': isinstance(form[name].field.widget, forms.CheckboxInput),
|
||||
'is_file': isinstance(form[name].field.widget, forms.FileInput),
|
||||
'is_checkbox': isinstance(form_field.field.widget, forms.CheckboxInput),
|
||||
'is_file': isinstance(form_field.field.widget, forms.FileInput),
|
||||
}
|
||||
if field_type and field_type in settings.ADDITIONAL_FIELDS:
|
||||
serialized_default = form[name].field.prepare_value(default)
|
||||
config_value['default'] = serialized_default
|
||||
config_value['raw_default'] = serialized_default
|
||||
config_value['value'] = form[name].field.prepare_value(value)
|
||||
|
||||
return config_value
|
||||
|
||||
|
|
|
|||
24
example/cheeseshop/fields.py
Normal file
24
example/cheeseshop/fields.py
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import json
|
||||
from django.forms import fields, widgets
|
||||
|
||||
|
||||
class JsonField(fields.CharField):
|
||||
widget = widgets.Textarea
|
||||
|
||||
def __init__(self, rows: int = 5, **kwargs):
|
||||
self.rows = rows
|
||||
super().__init__(**kwargs)
|
||||
|
||||
def widget_attrs(self, widget: widgets.Widget):
|
||||
attrs = super().widget_attrs(widget)
|
||||
attrs['rows'] = self.rows
|
||||
return attrs
|
||||
|
||||
def to_python(self, value):
|
||||
if value:
|
||||
return json.loads(value)
|
||||
else:
|
||||
return {}
|
||||
|
||||
def prepare_value(self, value):
|
||||
return json.dumps(value)
|
||||
|
|
@ -102,6 +102,7 @@ CONSTANCE_ADDITIONAL_FIELDS = {
|
|||
}
|
||||
],
|
||||
'email': ('django.forms.fields.EmailField',),
|
||||
'json_field': ['cheeseshop.fields.JsonField']
|
||||
}
|
||||
|
||||
CONSTANCE_CONFIG = {
|
||||
|
|
@ -112,6 +113,11 @@ CONSTANCE_CONFIG = {
|
|||
'DATE_ESTABLISHED': (date(1972, 11, 30), "the shop's first opening"),
|
||||
'MY_SELECT_KEY': ('yes', 'select yes or no', 'yes_no_null_select'),
|
||||
'MULTILINE': ('Line one\nLine two', 'multiline string'),
|
||||
'JSON_DATA': (
|
||||
{'a': 1_000, 'b': 'test', 'max': 30_000_000},
|
||||
'Some test data for json',
|
||||
'json_field',
|
||||
),
|
||||
}
|
||||
|
||||
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
|
||||
|
|
|
|||
Loading…
Reference in a new issue