第一種:利用serializers轉換
def json_test(request):
data = {}
book = Book.objects.all()
data['list'] = json.loads(serializers.serialize("json", book))
return JsonResponse(data)
得到的結果:
{
"list": [
{
"pk": 3,
"model": "myapp.book",
"fields": {
"book_name": "test",
"add_time": "2017-09-15T00:48:45.123Z"
}
},
{
"pk": 14,
"model": "myapp.book",
"fields": {
"book_name": "可以嗎",
"add_time": "2017-09-16T03:47:02.662Z"
}
},
{
"pk": 18,
"model": "myapp.book",
"fields": {
"book_name": "dfs dsf ",
"add_time": "2017-09-16T06:10:53.834Z"
}
},
{
"pk": 44,
"model": "myapp.book",
"fields": {
"book_name": "122323",
"add_time": "2017-09-25T07:15:56.058Z"
}
}
]
}
支持objects.all()的所有操作,如切片查詢all()[:10]、鏈式過濾查詢objects.all().filter(book_name=’test’)等價於objects.filter(book_name=’test’)等
支持objects.fifter()的所有操作
支持objects.values()的所有操作(但如果使用values的話,可以使用第二種方法轉化json)
第二種 利用values+list轉換
def json_test(request):
data = {}
book = Book.objects.values()
data['list'] = list(book)
return JsonResponse(data)
得到結果
{
"list": [
{
"id": 3,
"book_name": "test",
"add_time": "2017-09-15T00:48:45.123Z"
},
{
"id": 14,
"book_name": "可以嗎",
"add_time": "2017-09-16T03:47:02.662Z"
},
{
"id": 18,
"book_name": "dfs dsf ",
"add_time": "2017-09-16T06:10:53.834Z"
},
{
"id": 44,
"book_name": "122323",
"add_time": "2017-09-25T07:15:56.058Z"
}
]
}
這樣的結果更簡潔,也更適合使用。
同樣支持鏈式條件過濾查詢,如objects.values().filter(book_name=’test’)
支持切片查詢,如objects.values()[:10]
支持字段過濾查詢,如我只想查詢id和book_name 這兩個字段,只需這樣寫
book = Book.objects.values('id','book_name')
第三種 轉換objects.get()獲取的對象
利用一下方法:
dict([(kk,stu.__dict__[kk]) for kk in stu.__dict__.keys() if kk != "_state"])
例子
base_config = BaseConfig.objects.get(config_name=config_name)
response['data'] = object_to_json(base_config)
# objects.get()結果轉換
def object_to_json(obj):
return dict([(kk, obj.__dict__[kk]) for kk in obj.__dict__.keys() if kk != "_state"])
---------------------