2016-02-11 68 views
-1

例如,我在tastypie看到過,可以通過來自客戶端的json請求發送查詢,而tastypie知道將它轉換(我猜)爲ORM查詢並執行它。解析來自json的ORM查詢

我想模仿能力,使我能夠這樣JSON轉換:

{ 
    "foo__isnull": false, 
    "name__in": "paul,george", 
    "baz__fish": "blah", 
    "limit": 6 
} 

成類似

MyModel.objects.filter(foo__isnull=False, name__in=["paul", "george"], ...) 

沒有充分利用tastypie的開銷 - 是有可能嗎?

回答

1

你可以使用**在查詢中傳遞:

query = json.loads(your_json_string)  
MyModel.objects.filter(**query) 

萬一你想知道如何paul,george轉換成一個列表,這樣做:

query = json.loads(your_json_string) 
query['name__in'] = query['name__in'].split(',') 
+1

不要這麼草率。注意「paul,george」是不是一個python列表。此外,它還知道如何(除了這個例子)解析一個絃樂布爾,例如「假」到python False – Kludge

+1

我的意思是讓你知道將'**'傳遞給'filter'的功能功能。 Python json函數總是會將'false'轉換爲'False',並且還可以將'paul,george'轉換爲一個列表,所以我認爲downvote不會有多大意義。 –

+0

試圖自己解析它,迭代和處理所有選項並不是我所期望的。我感謝你的幫助,並可能最終實施它,但我希望有一些預製的工具。 – Kludge