Django использует неверный внешний ключ для соединения - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть две взаимосвязи между моделями в Django, многие ко многим между Foo и Bar и внешний ключ на Foo, указывающий на Bar.

Когда я делаюВ запросе, который включает как Foo, так и Bar, django настаивает на использовании Внешнего ключа вместо M2M для объединения.

(M2M - это реальные данные здесь, Внешний ключ - всего лишь немногокэширования, чтобы я мог получить самые последние Bar, созданные определенным методом.)

Так, например (где foos - это имя отношения «многие ко многим» в Bar)

Bar.objects.filter(foos__attribute = True)

Не возвращает все Bar с этим атрибутом, а только тот, на который Bar указывает * FK.Как я могу заставить его использовать M2M?Или это вообще плохая идея?

1 Ответ

0 голосов
/ 27 сентября 2011

Я понял это, и это определенно был случай «должен был использовать реальный код для примера».

У меня было отношение «многие ко многим» в таблице Bar, называемое «foos».'(скажем так).Внешний ключ автоматически создавал related_name в таблице Bar с именем 'foo'.На самом деле я не звонил:

Bar.objects.filter (foos__attribute = True)

Как я и говорил.Я звонил:

Bar.objects.filter (foo__attribute = True)

Который использовал автоматически созданное связанное имя Внешнего ключа 'foo' вместо имени многихto-many таблица 'foos'.

Итак, извлеченные уроки:

  • Не позволяйте django когда-либо выбирать связанное с вами имя
  • Будьте осторожны с множественным числом!
  • Опубликовать реальные примеры по SA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...