Допустим, у меня есть две модели Django Person и Company следующим образом: -
class Company(models.Model):
name = models.CharField()
class Person(models.Model):
last_name = models.CharField(blank=True)
first_name = models.CharField()
company = models.ForeignKey(Company, null=True, blank=True)
Лицо может принадлежать или не принадлежать Компании.
Я использую MySQL. Я хочу, чтобы все лица, которые не принадлежат какой-либо компании, то есть лица, в которых компания является нулевой.
Если я делаю Person.objects.filter(company__isnull=True)
, я получаю SQL, который по сути: -
SELECT * FROM PersonTable LEFT OUTER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
Как мне добиться следующего SQL: -
SELECT * FROM PersonTable INNER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
Из того, что я почерпнул из прочтения списка рассылки Django Users, это было поведение до QuerySet Refactor.
РЕДАКТИРОВАТЬ - Теперь я вижу богохульство моего вопроса!
То, что я хочу сказать, я просто хочу сделать
SELECT * FROM PersonTable WHERE PersonTable.company_id IS NULL