2016-11-17 22 views
0

說,我有一個叫做監視列表表中的所有行,這包含了我真正關心的實體的名單:獲取其中場Django的另一場比賽在另一個表

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() 

ocurse這一點,因爲它們需要實體對象監視列表的對象,而不是不工作,而是。這是最好的方法是什麼?我應該怎麼做:

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

不知道循環訪問每個元素,構建外列表是做正確的方式,或者如果它是可能通過一個查詢集,像這樣:

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

(上面的例子不會爲我工作,因爲他們的監視列表中的對象,而不是實體對象)

回答

1

您可以按照向後關係從EntityWatchlist

DistinctAlert.objects.filter(entities__watchlist__isnull=False)