例如,我有以下模型:
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()
但是如何在一个查询中做到这一点?
答案 0 :(得分:1)
您可以预取相关的汽车和火车:
vehicle = Transport.objects.first().prefetch_related('cars', 'trains')
然后您可以访问相关集:
print(vehicle.cars_set.all())
print(vehicle.trains_set.all())
主要问题是您只能通过.all()
访问相关集合(即,不进行过滤,不进行.first()
等),其他任何事情都会触发新的查询,从而使您的处境更糟性能方面比没有预取的情况要好。