Django ForeignKey,null = True,内连接和左外连接

前端之家收集整理的这篇文章主要介绍了Django ForeignKey,null = True,内连接和左外连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有两个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)

猜你在找的Python相关文章