2011-12-13 115 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) 
相关问题