Сложный запрос django, получение объектов, чей foreignkey_set не содержит объект, удовлетворяющий ограничению - PullRequest
0 голосов
/ 30 января 2019

У меня есть модель 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 ]

0 голосов
/ 30 января 2019

Я не до конца понимаю ваш вопрос, но кажется, что вы должны просто сделать:

Foo.objects.filter(baz=baz).exclude(bar__days__contains=day)
0 голосов
/ 30 января 2019

Вы можете попробовать DateRange из psycopg2.extras функции.Вот пример этого, ссылка

...