Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django反向引用上的过滤_Python_Django_Django Queryset - Fatal编程技术网

Python Django反向引用上的过滤

Python Django反向引用上的过滤,python,django,django-queryset,Python,Django,Django Queryset,我试图查询表中的所有对象,而不从另一个模型进行反向引用 class A(models.Model): pass class B(models.Model): reference = models.ForeignKey(A) 为了获得没有任何B对象引用的所有A对象,我需要 A.objects.filter(b__isnull=True) 报告根本没有提到反向引用 我会遇到麻烦吗?或者它只是缺乏文档记录?我在Django 1.10.3中使用了相同的代码示例 让我们看看Djang

我试图查询表中的所有对象,而不从另一个模型进行反向引用

class A(models.Model):
    pass

class B(models.Model):
    reference = models.ForeignKey(A)
为了获得没有任何
B
对象引用的所有
A
对象,我需要

A.objects.filter(b__isnull=True)
报告根本没有提到反向引用


我会遇到麻烦吗?或者它只是缺乏文档记录?

我在Django 1.10.3中使用了相同的代码示例

让我们看看Django创建的原始SQL语句:

>>> print(A.objects.filter(b__isnull=True).query)
SELECT "backrefs_a"."id" FROM "backrefs_a" LEFT OUTER JOIN "backrefs_b" ON ("backrefs_a"."id" = "backrefs_b"."reference_id") WHERE "backrefs_b"."id" IS NULL
从技术上讲,这与Django将发送到数据库的SQL并不完全相同,但已经足够接近了。有关更多讨论,请参阅

如果我们对其进行一些修饰,您可以看到该查询实际上是非常安全的:

SELECT "backrefs_a"."id"
FROM "backrefs_a"
LEFT OUTER JOIN "backrefs_b" ON ("backrefs_a"."id" = "backrefs_b"."reference_id")
WHERE "backrefs_b"."id" IS NULL

左外部联接中的
确保您将从A获取记录,即使B中没有匹配的记录。而且,由于Django不会使用
NULL
id来保存B,您可以放心,它将按预期工作。

我想不出一个不起作用的原因,似乎表明这是正确的