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)