Coverage for utilities/prefetch.py: 22%
17 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.contrib.contenttypes.fields import GenericRelation
2from django.db.models import ManyToManyField
3from django.db.models.fields.related import ForeignObjectRel
4from taggit.managers import TaggableManager
6__all__ = (
7 'get_prefetchable_fields',
8)
11def get_prefetchable_fields(model):
12 """
13 Return a list containing the names of all fields on the given model which support prefetching.
14 """
15 field_names = []
17 for field in model._meta.get_fields():
18 # Forward relations (e.g. ManyToManyFields)
19 if isinstance(field, ManyToManyField):
20 field_names.append(field.name)
22 # Reverse relations (e.g. reverse ForeignKeys, reverse M2M)
23 elif isinstance(field, ForeignObjectRel):
24 field_names.append(field.get_accessor_name())
26 # Generic relations
27 elif isinstance(field, GenericRelation):
28 field_names.append(field.name)
30 # Tags
31 elif isinstance(field, TaggableManager):
32 field_names.append(field.name)
34 return field_names