获取字段与django中另一个表中的另一个字段匹配的所有行

时间:2016-11-17 19:45:33

标签: django

假设我有一个名为watchlist的表,其中包含我真正关注的实体列表:

class Watchlist(models.Model):
    entity = models.ForeignKey(Entity)
    objects = WatchlistManager()

    def __str__(self):
        return str(self.entity)

并说我有一个警报列表:

class DistinctAlert(models.Model):
    alert_type = models.ForeignKey(AlertType, db_index=True, on_delete=models.CASCADE)
    entities = models.ManyToManyField(to='Entity', db_index=True, through='EntityToAlertMap')
    has_unattended = models.BooleanField(default=True)
    latest_datetime = models.DateTimeField()

无论警报类型是什么,只要实体存在于关注列表中,我就会尝试获取所有DistinctAlerts。

这样的事情:

DistinctAlert.objects.filter(entities__in=Watchlist.objects.all()).all()

但是由于它们需要实体对象而不是监视列表对象,所以这不起作用。对此最好的方法是什么?我应该这样做:

DistinctAlert.objects.filter(entities__in=[element.entity for element in self.all()]).all()

不确定迭代每个元素并在外部构建列表是正确的方法,或者是否可以传递这样的查询集:

DistinctAlert.objects.filter(entities__in=Watchlist.objects.all()).all()

(上面的例子对我来说不起作用,因为它们是监视列表对象而不是实体对象)

1 个答案:

答案 0 :(得分:1)

您可以遵循从EntityWatchlist的向后关系:

DistinctAlert.objects.filter(entities__watchlist__isnull=False)