When writing this code I remembered that `qs[0]` will result in a `qs[:1].get()` query. Looking at the Django QuerySet implementation I realize that this only happens when the result cache is empty: https://github.com/django/django/blob/1.6.2/django/db/models/query.py#L115

Now that I think about this I wonder if it would be better to check `_result_cache` instead? Both are internal APIs, but `_result_cache` has been there for quite a while and is probably more stable and less likely to change than `_prefetch_done`.