我有两张桌子,如下所示。
class AlertTable(models.Model):
id = models.AutoField(primary_key=True)
alarm_text = models.CharField(max_length=800,blank=False,null=False)
event_type = models.SmallIntegerField(blank=False,null=False)
created = models.DateTimeField()
class Meta:
ordering = ['-id']
def __unicode__(self):
return str(self.id)
class PendingAlertsTable(models.Model):
id = models.AutoField(primary_key=True)
alerttable = models.ForeignKey(AlertTable)
created = models.DateTimeField()
class Meta:
ordering = ['-id']
def __unicode__(self):
return str(self.id)
Idea是PendingAlertsTable持有对尚未确认的警报的引用。并且AlertTable保存所有警报。
所以我想构建一个查询,以便我可以从AlertTable中获取所有待处理的条目。
所以我构建了这样的查询:
inner_qs=PendingAlertsTable.objects.all()
all_pending_event = AlertTable.objects.filter(pk__in=inner_qs)
这不会给我在all_pending_event的预期条目中设置查询。在这种情况下构造__in查询的正确方法是什么?
答案 0 :(得分:1)
默认情况下,它将使用不是AlertTable主键的PendingAlertsTable记录的id。
请改为尝试:
pending_alert_ids = PendingAlertsTable.objects.values_list('alerttable__pk', flat=True).all()
all_pending_event = AlertTable.objects.filter(pk__in=pending_alert_ids)
或者更好的是,只需使用prefetch_related
或select_related
并执行:
all_pending_events = [ p.alerttable for p in PendingAlertsTable.objects.prefetch_related('alerttable') ]