Django QuerySet получает доступ к полю внешнего ключа напрямую, без принудительного соединения

Предположим, у вас есть запись модели с полем «author», указывающим на автора другой модели. Предположим, это поле может быть пустым.

Если я запустил следующий QuerySet:

Entry.objects.filter (author = X)

Где X - некоторое значение. Предположим, в MySQL я установил составной индекс для Entry для некоторого другого столбца и author_id, в идеале я бы хотел, чтобы SQL просто использовал «author_id» в модели Entry, чтобы он мог использовать составной индекс.

Получается, выходит, что Entry.objects.filter (author = 5) будет работать, соединение не выполняется. Но если я скажу author = None, Django соединяется с Author, а затем добавляет в предложение Where Author.id IS NULL. В этом случае он не может использовать составной индекс.

Есть ли способ указать Django просто проверять pk, а не переходить по ссылке?

Единственный известный мне способ - добавить дополнительный .extra (где = ['author_id IS NULL']) в QuerySet, но я надеялся, что магия в .filter () сработает.

Спасибо.

(Извините, что я не был более ясным раньше, и спасибо за ответы от lazerscience и Джоша).

6
задан OverClocked 16 November 2010 в 03:49
поделиться