2017-03-06 147 views
0

我試圖從Djano中的給定對象獲取屬性。我正在獲得價值,但我很好奇,好像有更好的方法來獲取這些數據。從Django中queryset中過濾數據而不返回整個查詢集

我用得到的name屬性:

owner_name = Owner.objects.filter(id=id).values('name') 

它正確返回name屬性我要找的,但它是在形式:

<QuerySet [{'name': u'John Doe'}]> 

如何我可以得到它只是返回「John Doe」而不是<QuerySet [{'name': u'John Doe'}]>

編輯:我發現,我能得到我需要通過執行信息: owner_name[0].get('name')

,它將返回John Doe。有沒有更好的方法來做到這一點,仍然只是爲了獲得1屬性?

回答

0

你想要一個values_list查詢與flat=True參數。從docs

一個常見的需要是獲取某個模型實例的特定字段值。爲了實現這一目標,使用values_list(),其次是一個get()調用:

Entry.objects.values_list( '標題',扁= TRUE)獲得(PK = 1)

或者在你的案例:

Owner.objects.values_list('name', flat=True).get(id=id) 

注意,如果不是正好有一個匹配的結果get將引發異常。如果這是可能的,比如說因爲你在過濾id以外的東西或者因爲可能沒有匹配的對象,你可以捕獲異常,或者你可以使用返回的名稱列表並檢查它的長度。

+0

謝謝。在閱讀文檔時,我確實必須錯過。那麼我可以處理這個異常。 – ducksauce88

相關問題