-from django.db.models import signals
-from django.dispatch import dispatcher
-from django import forms
-from django.forms.widgets import flatatt
-from django.forms.util import smart_unicode
-from django.utils import simplejson as json
-from django.utils.html import escape
-from django.utils.safestring import mark_safe
-
-
-class JSONEncoder(json.JSONEncoder):
- def default(self, obj):
- if isinstance(obj, datetime.datetime):
- return obj.strftime('%Y-%m-%d %H:%M:%S')
- elif isinstance(obj, datetime.date):
- return obj.strftime('%Y-%m-%d')
- elif isinstance(obj, datetime.time):
- return obj.strftime('%H:%M:%S')
- return json.JSONEncoder.default(self, obj)
-
-
-def dumps(data):
- return JSONEncoder().encode(data)
-
-
-def loads(str):
- return json.loads(str, encoding=settings.DEFAULT_CHARSET)
-
-
-class JSONField(models.TextField):
- def db_type(self):
- return 'text'
-
- def get_internal_type(self):
- return 'TextField'
-
- def pre_save(self, model_instance, add):
- value = getattr(model_instance, self.attname, None)
- return dumps(value)
-
- def contribute_to_class(self, cls, name):
- super(JSONField, self).contribute_to_class(cls, name)
- dispatcher.connect(self.post_init, signal=signals.post_init, sender=cls)