如何从多个表中检索数据

2024-10-17 06:19:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从多个表中检索数据,并使用动态构建的过滤器,该过滤器可能使用也可能不使用任何表中的数据。在

所以假设我有这个:

class Solution(models.Model):
    name = models.CharField(max_length=MAX, unique=True)
    # Other data

class ExportTrackingRecord(models.Model):
    tracked_id = models.IntegerField()
    solution = models.ForeignKey(Solution)
    # Other data

在其他地方我需要做的是:

^{pr2}$

据我所知,如果我碰巧对Solution中的一个字段进行筛选,django将执行连接,并select_related获取两个对象。如果我只过滤ExportTrackingRecord中的字段,那么就没有联接,django将为查询集中的每个ExportTrackingRecord生成一个新的查询(可能是数千…)

我对django相当陌生,但是有没有合理的方法来强制加入呢?在


Tags: 数据djangoname过滤器datamodelmodels动态
2条回答

select_related控制计算查询集时加载到结果中的内容。它将强制联接而不考虑过滤。在

如果不指定select_related,那么即使过滤器生成带有联接的sql查询,父模型的字段也不会加载到结果中,并且访问它们仍然需要额外的查询。在

^{}是解决问题的关键。如果您不使用它并且不过滤相关模型的字段,那么如果您访问相关模型的数据,Django将不会执行联接并对结果中的每一行都进行额外的查询。在

如果执行类似ExportTrackingRecord.objects.filter(...).select_related('solution')的操作,则会强制Django始终与Solution表进行联接。在

如果您需要在另一个方向上执行相同的操作,通过反向外键关系ship,您需要^{},多对多关系也是如此

相关问题 更多 >