Фильтр Django по совокупности сохраняющих деталей - PullRequest
0 голосов
/ 04 декабря 2018

У меня довольно простая задача отфильтровать модели, используя совокупное значение, например:

class A(models.Model):
    title = models.CharField()
    address = models.CharField()
    page_count = models.IntegerField()

Теперь мне нужно выбрать все A заголовки, которые имеют сумму page_count, равную дляПример 2 для того же адреса.Было бы легко, если бы мне не понадобился заголовок:

A.objects.all().values('address').annotate(pages=Sum(page_count)).filter(pages=2)

Но что, если мне нужно для каждой "строки" выбрать все A, которые "включены" в эту строку.

Например, у нас есть три модели:

  1. A(title='X', 'address'='aa', page_count=1)
  2. A(title='Z', 'address'='aa', page_count=1)
  3. A(title='Y', 'address'='bb', page_count=1)

Я хочу отображать только те заголовки, в которых суммарное количество страниц равно 2 (то есть 'X' и 'Z'), сгруппированных по адресу.

Возможно ли это в одном запросе?prefetch_related может быть?

1 Ответ

0 голосов
/ 04 декабря 2018

Вы можете попробовать вот так:

A.objects.all().values('address').annotate(pages=Sum(page_count)).filter(pages=2).values('title')
...