如何从字符串中删除“”到非字符串

时间:2011-12-13 03:00:31

标签: python

我有这个

a = "'Something': False"

我希望它是这个

a = 'Something': False

我该怎么办?我可以在双引号内删除内容,但不能引用引号本身。有研究,无法找到。我现在心烦意乱。遗憾

我试图这样做:

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

其中Location = Someplace and Gender =男性或女性。

但是当我不想要特定的性别或位置时呢?我唯一想到的就是做

Location__isnull:False,  Gender__isnull:False

但我不能同时拥有

Location:location, Location__isnull:False.

因此我必须将location参数作为变量。

我怎么能这样做呢。涉及位置和性别的信息来自request.GET

我不能发布我的代码,因为我一直在删除和更换意大利面以尝试制作可食用的东西。

3 个答案:

答案 0 :(得分:0)

你做不到。这是 not 有效的python语法:'Something': False ...除非它在字典中:{'Something': False}。不,您不能将'Something': False分配给变量。

答案 1 :(得分: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)

答案 2 :(得分: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()一样,如果您使用我建议的模式,您可以省略所有其他条款,只需输入{{1}一个空字典。

换句话说,您只需要指定您真正需要的查询术语,并通过将它们添加到参数字典来实现。然后使用filter(**arguments)调用过滤器。 **arguments是一种特殊的Python语法,它表示“获取此字典中的所有键/值对,并将它们转换为此函数的关键字参数。”