content: from django.contrib.contenttypes.fields import GenericRelation
  from django.db.models import ManyToManyField
  from django.db.models.fields.related import ForeignObjectRel
  from taggit.managers import TaggableManager
  
  __all__ = (
      'get_prefetchable_fields',
  )
  
  
  def get_prefetchable_fields(model):
      """
      Return a list containing the names of all fields on the given model which support prefetching.
      """
      field_names = []
  
      for field in model._meta.get_fields():
          # Forward relations (e.g. ManyToManyFields)
          if isinstance(field, ManyToManyField):
              field_names.append(field.name)
  
          # Reverse relations (e.g. reverse ForeignKeys, reverse M2M)
          elif isinstance(field, ForeignObjectRel):
              field_names.append(field.get_accessor_name())
  
          # Generic relations
          elif isinstance(field, GenericRelation):
              field_names.append(field.name)
  
          # Tags
          elif isinstance(field, TaggableManager):
              field_names.append(field.name)
  
      return field_names
  