Джанго: более сложный фильтр - PullRequest
1 голос
/ 23 января 2010

У меня есть эти модели:

класс A (модель): передать

класс B (модель): a = ForeignKey (A)

класс C (модель): b = ForeignKey (B)

У меня есть экземпляр A, который называется mya.

Я хочу найти все B для моего A, для которого есть хотя бы один C. Я могу сделать это в одной строке:

bsiwant = [c.b для c в C.objects.filter (b__a == mya)] (и каким-то образом унифицировать его)

... но, вероятно, это вызовет много запросов. Есть ли способ сделать это с фильтром, чтобы один запрос был выполнен?

Ответы [ 2 ]

1 голос
/ 23 января 2010
vals = C.objects.filter(b__a=mya).select_related("b").distinct()
bsiwant = [c.b for c in vals]

Должен сделать это в одном запросе.

1 голос
/ 23 января 2010

На самом деле, это должно сделать это:

B.objects.filter(a=mya, c__b__isnull=False)

или

B.objects.filter(a=mya, c__b=F('id'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...