假设我有两个Django模型人和公司如下:
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
解决方法
那么这个问题是老的,很快补丁就会在Django中.但是在短短的时间里,答案是在
http://code.djangoproject.com/ticket/10790年:
Workaround: Instead of
Person.objects.filter(company=None)
use
Person.objects.exclude(company__isnull=False)