2011-12-13 145 views
-1

我有這個如何擺脫「」從一個字符串到非字符串

a = "'Something': False" 

我想這是這個

a = 'Something': False 

我該怎麼辦呢?我可以在雙引號內刪除東西,但不能用引號本身。研究過,找不到。我時刻在心中。對不起

我試着這樣做:

query_results = UserProfile.objects.filter(Location: location, Gender: gender).extra(select={'rank': a > 0}, order_by=['-rank']) 

其中位置=的Someplace和性別=男或女。

但是當我不想要特定的性別或位置時怎麼辦。我能想到的唯一要做的事情是應該做

Location__isnull:False, Gender__isnull:False 

,但我不能兼得

Location:location, Location__isnull:False. 

因此,我必須有位置參數作爲一個變量。

我怎麼能這樣做。關於位置和性別的信息來自請求.GET

我不能發佈我的代碼,因爲我不斷刪除和更改意大利麪條嘗試使可食用的東西。

+1

你的第二個例子是無效的語法。你是不是指'a = {'Something':False}? – Cameron

+0

這就是問題所在。我想在{}中放入'a'。正如{a} –

+0

你會用'a'做什麼?如果你打印出來,結果已經是「'Something':False」。 – amazingjxq

回答

0

對於你想要做的事情,最簡單的方法是建立你想提供的參數的字典,然後將它們傳遞給filter()調用。這裏有一些非工作示例代碼可能會讓你朝着正確的方向前進。

arguments = {} 
if location is not None: 
    arguments['Location'] = location 
else: 
    arguments['Location__isnull'] = False 

if gender is not None: 
    arguments['Gender'] = gender 
else: 
    arguments['Gender__isnull'] = False 

query_results = UserProfile.objects.filter(**arguments) 

從您的問題中不清楚您是否真的需要搜索這些非空記錄。一個空的.filter()會返回所有的記錄,就像你打電話給.all()一樣,如果你使用我建議的模式,你可以省略所有的else子句,只給一個空字典提供filter(**arguments)

換句話說,你只需要指定你真正需要的查詢條件,並通過將它們添加到參數字典中來實現。然後你撥打電話**arguments**是一種特殊的Python語法,它表示「獲取此字典中的所有鍵/值對並將它們轉換爲此函數的關鍵字參數。」

+0

一個很好的方法來做到這一點乾杯 –

0

你不能。這是而不是有效的Python語法:'Something': False ......除非它在字典中:{'Something': False}。不,你不能將'Something': False分配給一個變量。

+0

該死的,生病繼續嘗試dif方法然後歡呼 –

+0

@JT。顯示你的所有代碼! –

+0

請參閱re,編輯帖子 –

0
stufftofilter = {} 
if shouldFilterLocation: 
    stufftofilter['Location'] = 'thelocation' 
# etc 
query_set = UserProfile.objects.extra(select={'rank':a>0}, order_by=['-rank']) 
if stufftofilter: 
    query_set.filter(**stufftofilter) 
相關問題