django "a содержит b" на ManyToManyField между A и B - PullRequest
0 голосов

У меня есть две таблицы A и B.A.bs - это ManyToManyField на B.

Я хочу получить все a в A, где a.bs содержит определенный b из B.

Единственный способ, которым я знаю, как это сделать, это:

def get_all_A_containing_b(b):
    return filter(lambda a: b in a.bs, A.objects.all())

Я бы предпочел, чтобы все это делалось СУБД, но я не хочу писать какой-либо код SQL или использоватьвнутренности django.

SQL выглядел бы примерно так: (я не могу вспомнить семантику JOIN и null, поэтому это может быть неправильно)

SELECT * FROM A a
LEFT JOIN A2B a2b on a2b.a_id = a.id
LEFT JOIN B b on a2b.b_id = b.id
WHERE b.id = $b;

, где $b замененос id из b из B Я хочу.

Ответы [ 2 ]

4 голосов
/ 22 декабря 2010

в чем проблема as = A.objects.filter(bs=b)

2 голосов
/ 22 декабря 2010

Вы пытались использовать обратный поиск через один из автоматических атрибутов _set?

b = B.objects.get( b_id)
a_list = b.a_set.all()

Я отвечаю со своего мобильного телефона, поэтому не могу проверить, работает ли это.

-Justin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...