Python Django查询未知数量的多个日期范围
我有一个表单,允许用户按多个年龄段选择用户:18-24岁、25-34岁、35-44岁等。当前,如果用户选择多个选择列表中的前两个字段,查询将返回用户18-34岁。如果用户选择18-24岁和35-44岁,则将包括18-44岁的所有年龄段,而不应包括25-34岁的用户 在用户表单选择之前,您如何在查询中包含多个范围过滤器,而不知道需要过滤的范围数 如果你知道用户要过滤的年龄范围的数量,我知道你可以使用Q来链接范围查询 这是我当前的查询:Python Django查询未知数量的多个日期范围,python,django,postgresql,Python,Django,Postgresql,我有一个表单,允许用户按多个年龄段选择用户:18-24岁、25-34岁、35-44岁等。当前,如果用户选择多个选择列表中的前两个字段,查询将返回用户18-34岁。如果用户选择18-24岁和35-44岁,则将包括18-44岁的所有年龄段,而不应包括25-34岁的用户 在用户表单选择之前,您如何在查询中包含多个范围过滤器,而不知道需要过滤的范围数 如果你知道用户要过滤的年龄范围的数量,我知道你可以使用Q来链接范围查询 这是我当前的查询: query = User.objects.filter(
query = User.objects.filter(
gender__in=genders,
created__in=dates,
data_source__in=sources,
dob__range=[dob_from, dob_to]
)
提前感谢。正如您在问题中所说,您可以使用Q对象并将它们组合在一起。这不是一个问题,你不知道会有多少Q对象。生成一个Q对象列表,然后将该列表缩减为一个Q 如果您不熟悉reduce和/或_,可以通过循环列表获得相同的结果:
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
正如您在问题中所说,您可以使用Q对象并将它们组合在一起。这不是一个问题,你不知道会有多少Q对象。生成一个Q对象列表,然后将该列表缩减为一个Q 如果您不熟悉reduce和/或_,可以通过循环列表获得相同的结果:
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
明亮的工作完美。现在来看看如何使用or_u和减少工作量。如果你不想,你不必使用reduce-你可以通过循环列表来生成Q。太棒了!工作完美。现在来看看如何使用or_u和减少工作量。如果不想使用reduce,您不必使用reduce,您可以通过循环列表来生成Q。