【问题标题】:django - OR query using lambdadjango - 使用 lambda 进行 OR 查询
【发布时间】:2015-05-02 12:07:45
【问题描述】:

我想使用 django ORM 执行 OR 查询。我参考了this 的答案,它符合我的需要。

我有一个动态生成的整数列表。这些整数表示特定表中的用户 ID。该表还有一个日期字段。我想在数据库中查询给定日期列表中的所有用户 ID。

例如:从下表中,我想要用户 id 2 和 3 在日期 2015-02-28 的记录

id |    date
---------------
 1 | 2015-02-23
 1 | 2015-02-25
 1 | 2015-02-28
 2 | 2015-02-28
 2 | 2015-03-01
 3 | 2015-02-28

我无法确定以下两个中哪一个最适合我的用例:

Table.objects.filter(reduce(lambda x, y: (x | y) & Q(date=datetime.date(2015, 2, 28)), [Q(user_id=i) for i in ids])

Table.objects.filter(reduce(lambda x, y: (x | y), [Q(user_id=i) for i in ids]) & Q(date=datetime.date(2015, 2, 28))

目前,上述两种方法都产生了相似的输出。如果没有lambda,下面的查询将满足我的需要:

Table.objects.filter(Q(user_id=3) & Q(date=datetime.date(2015, 2, 28))| Q(user_id=2) & Q(date=datetime.date(2015, 2, 28)))

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    我认为你在这里不需要reduceQ 对象,你可以这样做:

    Table.objects.filter(
        user_id__in=[2,3],
        date=datetime.date(2015, 2, 28),
    )
    

    【讨论】:

    • 谢谢!这比我想用的要容易理解。
    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 2019-04-04
    • 1970-01-01
    • 2021-12-23
    • 2011-06-25
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多