@@ -1283,6 +1283,7 @@ def get_entities_in_container(
12831283 container : Container ,
12841284 * ,
12851285 published : bool ,
1286+ select_related_version : str | None = None ,
12861287) -> list [ContainerEntityListEntry ]:
12871288 """
12881289 [ 🛑 UNSTABLE ]
@@ -1293,23 +1294,34 @@ def get_entities_in_container(
12931294 container: The Container, e.g. returned by `get_container()`
12941295 published: `True` if we want the published version of the container, or
12951296 `False` for the draft version.
1297+ select_related_version: An optional optimization; specify a relationship
1298+ on ContainerVersion, like `componentversion` or `containerversion__x`
1299+ to preload via select_related.
12961300 """
12971301 assert isinstance (container , Container )
1298- container_version = container .versioning .published if published else container .versioning .draft
1302+ if published :
1303+ # Very minor optimization: reload the container with related 1:1 entities
1304+ container = Container .objects .select_related (
1305+ "publishable_entity__published__version__containerversion__entity_list" ).get (pk = container .pk )
1306+ container_version = container .versioning .published
1307+ select_related = ["entity__published__version" ]
1308+ if select_related_version :
1309+ select_related .append (f"entity__published__version__{ select_related_version } " )
1310+ else :
1311+ # Very minor optimization: reload the container with related 1:1 entities
1312+ container = Container .objects .select_related (
1313+ "publishable_entity__draft__version__containerversion__entity_list" ).get (pk = container .pk )
1314+ container_version = container .versioning .draft
1315+ select_related = ["entity__draft__version" ]
1316+ if select_related_version :
1317+ select_related .append (f"entity__draft__version__{ select_related_version } " )
12991318 if container_version is None :
13001319 raise ContainerVersion .DoesNotExist # This container has not been published yet, or has been deleted.
13011320 assert isinstance (container_version , ContainerVersion )
1302- entity_list = []
1321+ entity_list : list [ ContainerEntityListEntry ] = []
13031322 for row in container_version .entity_list .entitylistrow_set .select_related (
1304- "entity_version__componentversion__component" ,
1305- "entity_version__containerversion__container" ,
1306- "entity__published__version__containerversion__unitversion__container__unit" ,
1307- "entity__published__version__containerversion__subsectionversion__container__subsection" ,
1308- "entity__published__version__containerversion__sectionversion__container__section" ,
1309- "entity__draft__version__componentversion__component" ,
1310- "entity__draft__version__containerversion__unitversion__container__unit" ,
1311- "entity__draft__version__containerversion__subsectionversion__container__subsection" ,
1312- "entity__draft__version__containerversion__sectionversion__container__section" ,
1323+ "entity_version" ,
1324+ * select_related ,
13131325 ).order_by ("order_num" ):
13141326 entity_version = row .entity_version # This will be set if pinned
13151327 if not entity_version : # If this entity is "unpinned", use the latest published/draft version:
0 commit comments