Django 过滤一个 ForeignKey 字段为 null

Django filter a ForeignKey field when it is null

假设我在 Django 中有两个表,TableATableB。 Table A 包含一些布尔字段,boolTableB 包含一个外键字段,for_fieldTableA,可以是 Null。

class TableA(models.Model):
    bool = models.BooleanField()

class TableB(models.Model):
    for_field = models.ForeignKey('TableA', null=True)

如果我想过滤 TableB 以获得 for_field.boolTruefor_fieldNull 的所有条目,什么是实现此目标的最短方法?

我正在使用 .filter((Q(for_field__is_null=True) | Q(for_field__bool=True)),但我想知道是否有更短的代码。

我很确定,您的选择是最短的(如果我错了请纠正我)。那是因为你不能在没有 Q 对象的情况下进行 OR 查询。

经过一些实验,似乎 .exclude(for_field__bool=False) 也将包含 for_field__isnull=True 条目,并且不会引发任何异常。您可以通过执行 .exclude(for_field__bool=False).filter(for_field__isnull=True) 并查看一些结果来确定。

老实说,我不知道哪个选项更快,但我认为你的带有两个 Q 对象的变体更具可读性,因为它显示了你真正想要的逻辑。所以我实际上建议你坚持下去。