Django 搜索一对一对多关系
我有三种型号,我们称它们为A型、B型和C型 A和B共享一对一关系,A可以在没有B的情况下存在,但B必须始终链接到A。C与B有多对一关系。或者换句话说: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
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()