Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django查询未知数量的多个日期范围_Python_Django_Postgresql - Fatal编程技术网

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

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(

我有一个表单,允许用户按多个年龄段选择用户:18-24岁、25-34岁、35-44岁等。当前,如果用户选择多个选择列表中的前两个字段,查询将返回用户18-34岁。如果用户选择18-24岁和35-44岁,则将包括18-44岁的所有年龄段,而不应包括25-34岁的用户

在用户表单选择之前,您如何在查询中包含多个范围过滤器,而不知道需要过滤的范围数

如果你知道用户要过滤的年龄范围的数量,我知道你可以使用Q来链接范围查询

这是我当前的查询:

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。