2014-10-27 99 views
0

我希望能夠使用此過濾器「特定」或「空」或「任何值」場景Django的篩選

# 3 scenarios for the third field : Col3 

# Query for a specific value 
sample = table.objects.filter(Col1=343, Col2=545, Col3=656) 

# Query for NULL value 
sample = table.objects.filter(Col1=343, Col2=545, Col3=None) 

# Query for any value 
sample = table.objects.filter(Col1=343, Col2=545, Col3=???) 

具體和NULL場景的處理在一個MySQL列的任何值通過像Python 656和「無」在Python中的確切值。 我們如何處理上面的任何值scnearios?

想象一下我們可以查詢數據庫的3個下拉框。

我的問題是與此類似,但具體到Django的

原來的SQL的具體問題是在這裏:How do you query an int column for any value?,coloumn在我的情況可以是任何類型

生成的查詢可能是這個樣子的:

// Query for a specific value 
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3=656  
// Query for NULL value 
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3 IS NULL 
// Query for any value 
select Col1,Col2,Col3 from table where Col1=343, Col2=545, Col3=*  
+0

你有試過'Col3__in = [656,None]嗎? – Anzel 2014-10-27 13:53:39

+0

我誤解了嗎?所以你想要過濾Col3 = 656,None或全是動態的? – Anzel 2014-10-27 14:02:15

+0

是的第二個評論是我正在尋找的,它可以是任何值不只是656 ... – maheshg 2014-10-27 14:05:01

回答

0

我想你應該能夠省略Col3過濾器是這樣的:

sample = table.objects.filter(Col1=343, Col2=545) 

編輯:你是否試圖將所有這些案例壓縮成一個單一的陳述?

我對Django中的QuerySets的細微之處不夠熟悉,給你一個單線,但是,把你的3個下拉框例子稍微進一步......如果你的下拉列表中包含'None'和'Any '除了定期的價值清單?這樣你可以根據提供的參數選擇一個查詢。

if param3 == 'None': 
    sample = table.objects.filter(Col1=343, Col2=545, Col3=None) 
elif param3 == 'Any': 
    sample = table.objects.filter(Col1=343, Col2=545) 
else: 
    sample = table.objects.filter(Col1=343, Col2=545, Col3=param3) 
+0

是的,我試圖凝結它。 – maheshg 2014-10-27 13:57:37

+0

@ user1035818:我編輯了我的答案 - 它應該這樣做,直到有人對Django有更多經驗可以幫助您。 – soulprovidr 2014-10-27 14:23:21

+0

我已經這樣做了,但必須有一些更好的方法來壓縮它。我有5列我想要應用這些情況,所以凝結它使它非常整潔,而不是去做一個大的if-else塊。感謝你的幫助。 :) – maheshg 2014-10-28 04:50:41