我想使用列表在Django中运行查询。我在堆栈溢出中找到了类似的帖子,使我到达了现在的位置,但是我似乎无法使我的代码正常工作。我认为唯一的区别是我正在使用REST。
我下面的代码抛出错误unsupported operand type(s) for &: 'Build' and 'Build'
我期望查询将返回author_id匹配machinesOwned列表中任何值的所有条目。
from .models import Build
import operator
from functools import reduce
class buildStatsAPI(generics.ListCreateAPIView):#for build stats
permission_classes = (permissions.IsAuthenticated,)
serializer_class = buildStatsAPI_serializer
def get_queryset(self):
machinesOwned = [4,5,7,9]
query = reduce(operator.and_, (Build(author_id= item) for item in [machinesOwned]))
return Build.objects.filter(query,deleted = 0,).values()
答案 0 :(得分:1)
您可以动态创建Q
对象的列表,但是您可以通过另一种方式更有效地完成此操作:
Build.objects.filter(
deleted=0,
author_id__in=machinesOwned,
).values()
否则,如果您采用当前的方法:
from django.db.models import Q
query = reduce(operator.and_, (Q(author_id= item) for item in machinesOwned))
Build.objects.filter(query,deleted = 0,).values()