diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-05-29 17:22:43 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 08:49:36 +0200 |
commit | 8966578a0ff1d572cf0310f5d40fc965f2949028 (patch) | |
tree | a4cd7449000be3ad4dac0f00698caa3c018377d9 /ishtar_common | |
parent | 81e10037665ea5c4af15dd656c25f6e8c0d9dabf (diff) | |
download | Ishtar-8966578a0ff1d572cf0310f5d40fc965f2949028.tar.bz2 Ishtar-8966578a0ff1d572cf0310f5d40fc965f2949028.zip |
Utils: script to help creation of json data fields from existing data in database
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/utils.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 0c4d217d6..ceaa7d27a 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -30,6 +30,7 @@ import tempfile from django import forms from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.contrib.gis.geos import GEOSGeometry from django.contrib.sessions.backends.db import SessionStore from django.core.cache import cache @@ -687,3 +688,37 @@ def generate_relation_graph(obj, debug=False): return shutil.rmtree(tempdir) + +def create_default_json_fields(model): + """ + Create default json field configuration in existing database + :param model: model concerned + """ + from ishtar_common.models import JsonDataField + + def _get_keys(data, current_path=""): + keys = [] + for key in data.keys(): + if type(data[key]) == dict: + keys += _get_keys(data[key], current_path + key + "__") + continue + keys.append(current_path + key) + return keys + + keys = [] + for item in model.objects.all(): + for key in _get_keys(item.data): + if key not in keys: + keys.append(key) + + content_type = ContentType.objects.get_for_model(model) + for key in keys: + JsonDataField.objects.get_or_create( + content_type=content_type, key=key, + defaults={ + 'name': u" ".join(key.split('__')).capitalize(), + 'value_type': 'T', + 'display': False + } + ) + |