django查詢結果轉json的幾種方法


第一種:利用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"])

--------------------- 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM