获取引用对象多重层djang

2024-06-16 16:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我和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的环境。我怎样才能做到呢?谢谢你


Tags: 对象djangonamemodelenvironment链接onmodels
1条回答
网友
1楼 · 发布于 2024-06-16 16:28:32

我们可以通过反向引用关系来做到这一点,并使用isnull来检查是否存在。由于一个环境有可能有多个Element,而一个Element多个AlarmActive,我们可能应该在这里使用.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

请注意,通常建议使用小写(带下划线)编写related_name。因为这将引入一个属性和参数,这些属性和参数通常也是小写的

相关问题 更多 >