复杂的django查询,获取foreignkey_set不包含满足限制的对象的对象
Complex django query, getting objects whose foreignkey_set does not contain an object that satisfies a restriction
我有一个模型 foo
和一个模型 bar
。 bar
有一个指向 foo
的外键,以及一个 days
字段,它是一个 postgresql DateRangeField
class Foo(models.Model):
baz = models.CharField()
class bar(models.Model):
foo = models.ForeignKey(Foo, on_delete=models.CASCADE)
days = DateRangeField()
我需要做一个查询,给定一个日期 (day
) 和一个 baz
:获取所有满足 baz = baz
和 没有有一个关联的bar
对象满足days.lower < days < days.upper
(或者换句话说,在他们的days
变量范围内没有day
.
我查看了 Q 查询,但到目前为止我发现的唯一方法是获取所有 Foo
满足 baz=baz
的对象,然后使用 python 完成剩下的工作(这在数据库查询方面显然效率低下)。
您可以从 psycopg2.extras
函数中尝试 DateRange
。这是一个例子,link
我不完全理解你的问题,但看起来你应该简单地做:
Foo.objects.filter(baz=baz).exclude(bar__days__contains=day)
我有一个模型 foo
和一个模型 bar
。 bar
有一个指向 foo
的外键,以及一个 days
字段,它是一个 postgresql DateRangeField
class Foo(models.Model):
baz = models.CharField()
class bar(models.Model):
foo = models.ForeignKey(Foo, on_delete=models.CASCADE)
days = DateRangeField()
我需要做一个查询,给定一个日期 (day
) 和一个 baz
:获取所有满足 baz = baz
和 没有有一个关联的bar
对象满足days.lower < days < days.upper
(或者换句话说,在他们的days
变量范围内没有day
.
我查看了 Q 查询,但到目前为止我发现的唯一方法是获取所有 Foo
满足 baz=baz
的对象,然后使用 python 完成剩下的工作(这在数据库查询方面显然效率低下)。
您可以从 psycopg2.extras
函数中尝试 DateRange
。这是一个例子,link
我不完全理解你的问题,但看起来你应该简单地做:
Foo.objects.filter(baz=baz).exclude(bar__days__contains=day)