使用列表的Django查询

时间:2019-02-03 16:54:48

标签: django

我想使用列表在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() 

1 个答案:

答案 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()