Сложный запрос django, получение объектов, чей foreignkey_set не содержит объект, удовлетворяющий ограничению
У меня есть модель, 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
: получить все объекты Foo, которые удовлетворяют baz = baz
и которые не имеют связанных bar
объект, который удовлетворяет days.lower < days < days.upper
(или другими словами, не имеют day
в пределах их days
переменная.
Я посмотрел на Q-запросы, но единственный способ сделать это до сих пор - это получить все Foo
объекты, которые удовлетворяют baz=baz
а затем используйте python, чтобы сделать все остальное (что явно неэффективно с точки зрения запросов к БД).
2 ответа
Я не до конца понимаю ваш вопрос, но кажется, что вы должны просто сделать:
Foo.objects.filter(baz=baz).exclude(bar__days__contains=day)
Ты можешь попробовать DateRange
от psycopg2.extras
функция. Вот пример того, ссылка