我有一个 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 表是一个查找表,应该复制,但是 library 表是 schema 的中心,不应该像 T9 一样复制
是否有关于导致 ORM 添加重复表的原因的任何好的文档?视图中发生了各种各样的事情(可选地应用各种过滤器,查询集上的注释)。
我可以使用原始 SQL,但我更喜欢使用 Django 对象,因为使用这些对象进行排序和分页要容易得多。
我想知道 API 的哪一部分导致库表被第二次添加,所以我可以避免它(如果可能的话)。