我有一个Django通用列表视图。 因此,它首先查看各种请求参数(列表过滤器,排序),并根据请求参数多次应用queryset.filter()方法(或根本不应用)。
然后它会进行一些聚合,但总数不正确。查看查询,似乎是在查询中添加两次或多次各种表。
因此查询的FROM部分的片段如下所示:
INNER JOIN `sequencing_sample` ON (`sequencing_samplesubprojectstats`.`sample_id` = `sequencing_sample`.`id`)
LEFT OUTER JOIN `sequencing_library` ON (`sequencing_sample`.`id` = `sequencing_library`.`sample_id`)
LEFT OUTER JOIN `sequencing_loadedwith` ON (`sequencing_library`.`id` = `sequencing_loadedwith`.`library_id`)
LEFT OUTER JOIN `sequencing_passfail` ON (`sequencing_loadedwith`.`passfail_id` = `sequencing_passfail`.`id`)
LEFT OUTER JOIN `sequencing_passfail` T6 ON (`sequencing_library`.`passfail_id` = T6.`id`)
LEFT OUTER JOIN `sequencing_organism` ON (`sequencing_sample`.`organism_id` = `sequencing_organism`.`id`)
LEFT OUTER JOIN `sequencing_subproject` ON (`sequencing_samplesubprojectstats`.`subproject_id` = `sequencing_subproject`.`id`)
LEFT OUTER JOIN `sequencing_library` T9 ON (`sequencing_sample`.`id` = T9.`sample_id`)
passfail表是一个查找表,应该是重复的,但库表是模式的核心,不应该像T9一样重复
是否有关于导致ORM添加重复表的原因的良好文档?视图中发生了各种各样的事情(可选地应用各种过滤器,查询集上的注释)。
我可以使用原始SQL,但我更喜欢使用Django对象,因为使用它们可以更轻松地进行排序和分页。
我想知道API的哪一部分导致第二次添加库表,所以我可以避免它(如果可能的话)。