在一个查询中选择2个相关字段

时间:2019-02-11 10:57:28

标签: django django-models

例如,我有以下模型:

class Transport(models.Model):
    pass

class Car(models.Model):
    type = models.ForeignKey(Transport, related_name='cars')

class Train(models.Model):
    type = models.ForeignKey(Transport, related_name='trains')

要分别获取汽车和火车,我可以执行以下操作:

Transport.objects.first().cars.all()
Transport.objects.first().trains.all()

但是如何在一个查询中做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以预取相关的汽车和火车:

vehicle = Transport.objects.first().prefetch_related('cars', 'trains')

然后您可以访问相关集:

print(vehicle.cars_set.all())
print(vehicle.trains_set.all())

主要问题是您只能通过.all()访问相关集合(即,不进行过滤,不进行.first()等),其他任何事情都会触发新的查询,从而使您的处境更糟性能方面比没有预取的情况要好。