我有这个
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
我不能发布我的代码,因为我一直在删除和更换意大利面以尝试制作可食用的东西。
答案 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语法,它表示“获取此字典中的所有键/值对,并将它们转换为此函数的关键字参数。”