Сложный запрос 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 функция. Вот пример того, ссылка

Другие вопросы по тегам