prefetch_related does not document restriction
|Reported by:||pab@…||Owned by:||nobody|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I have just been trying to track down a performance issue in my application using Django 1.6. The solution was to use prefetch_related(), bit it didn't quite work as expected. The documentation was great as far as it went and so I found the necessary function with little fuss - well done! However it didn't warn me that prefetch_related() must be restricted to a homogenous set of results.
In particular, I had query that needed to fetch data for objects found through a GenericForeignKey and then a ManyToManyField. While the pre-fetch claimed it had worked, it only actually queried the ManyToManyField results for the first matching ContentType of the GenericForeignKey. Looking at the code, this is a deliberate design decision, but it is not documented anywhere I could see.
I understand why this restriction is in place and so am not asking for a feature enhancement. Instead, I think the documentation for this function needs to make clear that pre-fetching objects referenced by GenericForeignKeys is only supported if the query has restricted the key to one ContentType.