在下面的代码行中遇到错误:“Q对象不可订阅”:
input = [{"sid":1,"st":7},{"sid":2,"st":5},{"sid":3,"st":9},{"sid":4,"st":7},{"sid":5,"st":9},{"sid":6,"st":7}]
queries = [Q(sid=i['sid'], st=i['st']) for i in input]
sid_query = reduce(lambda x,y: (x['sid'] == y['sid']) & (x['st'] >= y['st']), queries) # IN THIS LINE
queryset=cube.objects.values_list('pid').filter(sid_query)
res = list(queryset.values())
我试图从具有(sid和st)值组合的行中获取pid。 sid应该等于我输入的sid,而st应该大于或等于各个sid的st值。
这就是mysql表的样子:
这是我的模特:
class cube(models.Model):
pid = models.IntegerField()
av = models.CharField(max_length=100)
sid = models.IntegerField()
st = models.IntegerField()
如果输入为[{“sid”:1,“st”:5},{“sid”:2,“st”:5}] 我的查询应返回以下条件的pid - 请注意,对于sid和st值的不同组合,每个pid有10行。
(sid = 1,st> = 5)和(sid = 2,st> = 7)
根据我的表格,这会导致两个pids - 3214和3215。
我错过了什么?
据我所知,对于实现__getitem()函数不起作用的容器,抛出'对象不是Subscriptable',如何在查询中的Q对象上修复此问题?