소스 검색

Fix datetime json encoder

Denis K 9 년 전
부모
커밋
9ad1ba27b2
2개의 변경된 파일8개의 추가작업 그리고 9개의 파일을 삭제
  1. 3 3
      jet/modules.py
  2. 5 6
      jet/utils.py

+ 3 - 3
jet/modules.py

@@ -4,7 +4,7 @@ from django.contrib.admin.models import LogEntry
 from django.db.models import Q
 from django.template.loader import render_to_string
 from django.utils.translation import ugettext_lazy as _
-from jet.utils import get_app_list, LazyEncoder
+from jet.utils import get_app_list, DateTimeEncoder
 import datetime
 
 
@@ -67,13 +67,13 @@ class DashboardModule(object):
     def dump_settings(self, settings=None):
         settings = settings or self.settings_dict()
         if settings:
-            return json.dumps(settings, cls=LazyEncoder)
+            return json.dumps(settings, cls=DateTimeEncoder)
         else:
             return ''
 
     def dump_children(self):
         if self.store_children():
-            return json.dumps(self.children, cls=LazyEncoder)
+            return json.dumps(self.children, cls=DateTimeEncoder)
         else:
             return ''
 

+ 5 - 6
jet/utils.py

@@ -1,3 +1,4 @@
+import datetime
 from importlib import import_module
 import json
 from django.core.serializers.json import DjangoJSONEncoder
@@ -5,9 +6,7 @@ from django.http import HttpResponse
 from django.core.urlresolvers import reverse, resolve
 from django.contrib import admin
 from django.contrib.admin import AdminSite
-from django.utils.encoding import force_text
 from django.utils.encoding import smart_text
-from django.utils.functional import Promise
 from jet import settings
 from django.contrib import messages
 
@@ -73,11 +72,11 @@ def get_current_dashboard(location):
     return index_dashboard_cls
 
 
-class LazyEncoder(json.JSONEncoder):
+class DateTimeEncoder(json.JSONEncoder):
     def default(self, obj):
-        if isinstance(obj, Promise):
-            return force_text(obj)
-        return obj
+        if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date):
+            return obj.isoformat()
+        return json.JSONEncoder.default(self, obj)
 
 
 def get_model_instance_label(instance):