假设我有一个名为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()
(上面的例子对我来说不起作用,因为它们是监视列表对象而不是实体对象)
答案 0 :(得分:1)
您可以遵循从Entity
到Watchlist
的向后关系:
DistinctAlert.objects.filter(entities__watchlist__isnull=False)