mirror of https://github.com/jumpserver/jumpserver
				
				
				
			
		
			
				
	
	
		
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
| import json
 | |
| import uuid
 | |
| import logging
 | |
| from datetime import datetime
 | |
| 
 | |
| from django.utils.translation import ugettext_lazy as _
 | |
| from django.utils import timezone as dj_timezone
 | |
| from django.db import models
 | |
| from django.conf import settings
 | |
| 
 | |
| lazy_type = type(_('ugettext_lazy'))
 | |
| 
 | |
| 
 | |
| class ModelJSONFieldEncoder(json.JSONEncoder):
 | |
|     """ 解决一些类型的字段不能序列化的问题 """
 | |
| 
 | |
|     def default(self, obj):
 | |
|         str_cls = (models.Model, lazy_type, models.ImageField, uuid.UUID)
 | |
|         if isinstance(obj, str_cls):
 | |
|             return str(obj)
 | |
|         elif isinstance(obj, datetime):
 | |
|             obj = dj_timezone.localtime(obj)
 | |
|             return obj.strftime(settings.DATETIME_DISPLAY_FORMAT)
 | |
|         elif isinstance(obj, (list, tuple)) and len(obj) > 0 \
 | |
|                 and isinstance(obj[0], models.Model):
 | |
|             return [str(i) for i in obj]
 | |
|         else:
 | |
|             try:
 | |
|                 return super().default(obj)
 | |
|             except TypeError:
 | |
|                 logging.error('Type error: ', type(obj))
 | |
|                 return str(obj)
 |