您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Django查询未知数量的多个日期范围

Django查询未知数量的多个日期范围

正如您在问题中所说的,您可以使用Q()对象并将它们组合在一起。您不知道Q()会有多少个对象,这不是问题。生成Q()对象的列表,然后将列表缩小为单个Q()

from operator import or_

# import for Python 3, not required in Python 2
from functools import reduce

ranges = [(18,24), (35, 44)]  # hardcoded as an example, you can dynamically generate this
qs = [Q(dob_range=[dob_from_, dob_to]) for (dob_from_, dob_to) in ranges]
# combine the qs
dob_q = reduce(or_, qs, Q())

query = User.objects.filter(
    dob_q,
    gender__in=genders,
    created__in=dates,
    data_source__in=sources,
)

如果您不熟悉reduceor_,则可以通过遍历列表来获得相同的结果:

qs = [Q(dob_range=[dob_from_, dob_to]) for (dob_from_, dob_to) in ranges]
dob_q = Q()
for q in qs:
    dob_q = dob_q | q
Go 2022/1/1 18:48:09 有326人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶