django中是否存在基于一对一关系的查询进行过滤?

django中是否存在基于一对一关系的查询进行过滤?,django,Django,考虑模型模式: class A(models.Model): id = models.IntegerField(...) ... class B(models.Model): parent = models.OneToOneField(A, primary_key=True) 并进一步假设A的行数多于B(例如,并非所有As都有详细信息)。我如何生成一个查询,该查询只提供具有关联Bs的As 我尝试了A.objects.filter(b_uisnull=False),它似乎不起作用,

考虑模型模式:

class A(models.Model):
  id = models.IntegerField(...)
  ...

class B(models.Model):
  parent = models.OneToOneField(A, primary_key=True)
并进一步假设A的行数多于B(例如,并非所有As都有详细信息)。我如何生成一个查询,该查询只提供具有关联Bs的As


我尝试了A.objects.filter(b_uisnull=False),它似乎不起作用,它仍然返回A中的所有行。

如果它是OneToOne,则没有管理器,只有对象本身。所以我认为应该是A.B.

你所拥有的应该有用。刚刚在我自己的应用程序中的OneToOneField反向关系上验证了它。然而,我从来没有在一个也是主键的OneOfeld上尝试过这样做。出于某种原因,这可能会打乱查询。只是为了测试理论,需要做一点额外的工作,但您可能想尝试使用标准的
自动字段
(或者让Django通过删除
主键
)作为主键来自动创建它,然后看看您的查询是否有效。

我刚刚尝试了这个,它对我有效:

A.objects.exclude(b=None)
或者,一个有点黑的版本,它依赖于主键(通常)的整数非负性质

A.objects.filter(b__id__gte=0)
现在,我有一个相关的名称,所以如果这些名称对您不起作用,请尝试添加相关的名称

class Profile(models.Model):
    user   = models.OneToOneField(User, related_name='profile')
由于所有B必须有A(反之亦然):

一对一的关系。从概念上讲,这类似于 ForeignKey with unique=True,但关系的“反面” 将直接返回单个对象


您是否尝试过
A.objects.exclude(b_uisnull=True)
B.objects.filter(parent__isnull=False)