方法一:
django.core中的serializers
使用
import django.core中的serializers,
data = serializers.serialize('json',data)
缺点:对外键支持很差,无法查询到外键数据
方法二:
QuerrySet的value方法
使用:
先使用value将QuerrySet转化成ValueSet,可以指定字段(包括外键的字段)。再利用list将ValueSet转化为list,最后通过json.dumps()转化为json。
A = models.objects.all()
data =A.value('name', 'foreignkey__name')
data = json.dumps(list(data))
缺点:
在字段含有datetime格式时,默认的处理函数无法将datetime格式化,进而报错。
解决
支持外键格式化,并且字段中含有datetime格式数据:
类似方法二,只是json.dumps()
函数自定义JsonEncoder
过程:
class DateJSONEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, datetime.datetime):
return o.strftime("%Y-%m-%d %H-%M")
if isinstance(o, datetime.date):
return o.strftime("%Y-%m-%d")
else:
return json.JSONEncoder.default(self, o)
A = models.objects.all()
data =A.value('name', 'foreignkey__name')
data = json.dumps(list(data), cls=DateJSONEncoder)
网友评论