2014-10-27 98 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