【问题标题】:Select 2 related fields at one query一次查询选择 2 个相关字段
【发布时间】:2019-02-11 10:57:28
【问题描述】:

例如,我有以下型号:

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

但是我怎样才能在一个查询中完成呢?

【问题讨论】:

标签: django django-models


【解决方案1】:

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

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

然后就可以访问相关集合了:

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

主要问题是您只能通过.all() 访问相关集(即没有过滤,没有.first() 等),其他任何事情都会触发新查询,让您在性能方面比没有预取。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多