获取引用的对象multipla层django

时间:2018-07-15 10:10:48

标签: python django django-models

我正在使用Django,无法获取链接引用的对象。 这是我们的模特

class Environment(models.Model):
    name = models.CharField(max_length=200, unique=True)

class Element(models.Model):
    environment = models.ForeignKey(Environment, on_delete=models.CASCADE,related_name='GroupPre')

class AlarmActive(models.Model):
    element = models.ForeignKey(Element, on_delete=models.CASCADE,related_name='AlarmActivePre')

我的任务很简单,我必须获取所有具有AlarmActive的环境。我该如何实现?谢谢!

1 个答案:

答案 0 :(得分:0)

我们可以通过反向引用关系来做到这一点,并使用isnull检查是否存在。由于环境可能有多个 Element s,而Element多个 AlarmActive s,我们应该使用{ {1}},以避免多次检索 same .distinct()

Environment
Environment.objects.filter(GroupPre__AlarmActivePre__isnull=False).distinct()

请注意,通常建议使用小写(带有下划线)编写SELECT DISTINCT `environment`.* INNER JOIN `element` ON `environment`.`id` = `element`.`environment_id` INNER JOIN `alarmactive` ON `element`.`id` = `alarmactive`.`element_id` WHERE `alarmactive`.`id` IS NOT NULL 。由于这会引入属性和参数,因此通常也以小写形式编写。