加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:08:54 所属栏目:Python 来源:网络整理
导读:假设我有两个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,b
假设我有两个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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读