Django 搜索一对一对多关系

Django 搜索一对一对多关系,django,django-models,Django,Django Models,我有三种型号,我们称它们为A型、B型和C型 A和B共享一对一关系,A可以在没有B的情况下存在,但B必须始终链接到A。C与B有多对一关系。或者换句话说: class ModelA(models.Model): #properties class ModelB(models.Model): a_link = models.OneToOneField(A, on_delete=models.CASCADE, related_name='a_link') #rest of the prop

我有三种型号,我们称它们为A型、B型和C型

A和B共享一对一关系,A可以在没有B的情况下存在,但B必须始终链接到A。C与B有多对一关系。或者换句话说:

class ModelA(models.Model):
  #properties

class ModelB(models.Model):
  a_link = models.OneToOneField(A, on_delete=models.CASCADE, related_name='a_link')
  #rest of the properties

class ModelC(models.Model):
  set = models.ForeignKey(ModelB, on_delete=models.CASCADE)
  user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True)
现在,我的问题是,我想通过检查用户标记了哪些Cs来查找用户拥有的所有A。我可以只搜索
ModelA.objects.filter(a\u link\u modelc\u\u user=user)
吗?或者我需要先在Cs自己的查询中搜索Cs,然后从中选择Bs并查找它们与a的关系吗?

您可以使用以下方法进行筛选:

ModelA.objects.filter(a_link__modelc__user=user).distinct()
因此,查询是:

ModelA.objects.filter(b_object__modelc__user=user).distinct()
ModelA.objects.filter(b_object\u modelc\u user=user).distinct()

注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见


啊,这就是为什么我一直打破。我想相关的_名称应该是“指向链接的对象”,而不是“来自链接的对象”。谢谢你的澄清!
ModelA.objects.filter(b_object__modelc__user=user).distinct()