I don't think casting "the_m2ms.all()" to a list is needed, and it will cause all related objects to be loaded into memory at once.

Maybe we could do:
m2m_objs = the_m2ms.all() if isinstance(the_m2ms, (Manager, QuerySet)) else the_m2ms

That would allow "the_m2ms" to be any iterable at all.