2015-09-05 37 views
1

在動態查詢中我需要比較的表中有2列表示「column_a」和「column_b」(所有列都是字符串)。要比較的實際列在運行時決定。如何通過動態查詢比較表中的2列

我正在使用kwargs來創建字典。但是Django假定RHS絕對不是同一個表的一列,而是絕對值&。使用F()是一個選項,但我無法找到在Kwargs中使用F()的任何文檔。

如果我使用kwargs = { 'predicted_value': 'actual_value'} 'actual_value' 作爲一個字符串,而不是列名

我如何使用這樣的: kwargs = { 'predicted_value' :F('actual_value')}並通過它作爲Model.objects.filter(** kwargs)

或者,有沒有辦法在LHS中使用F('列')? 例如Model.objects.filter(F(column1_name)= F(column2_name))

+1

你能共享代碼? – Gocht

+0

什麼是RHS/LHS? kwargs是一本字典。你似乎很困惑。只要將'objects.filter'傳遞給一個動態構建的字典,如果我能很好地理解問題 – Pynchia

+0

哦,不,不,你可以在查詢中使用de'F'函數。 'Model.objects.filter(some_col = F(kwargs.get( 'predicted_value')))'。我以前沒有這樣做過,但你可以試一試 – Gocht

回答

2

對於非動態過濾器領域,我會用:

from django.db.models import F 

Model.objects.filter(some_col=F(kwargs.get('predicted_value'))) 

但是如果你需要它的所有動態,你可以試試搭配:

kwargs = {'predicted_value':F('actual_value')} 
Model.objects.filter(**kwargs) 

,你甚至可以進入相關領域:

kwargs = {'fk_field__somefield':F('actual_value')} 
Model.objects.filter(**kwargs)