docs: def inject_to(self, objects, field_name, get_inject_object = lambda obj: obj,
                    select_related = None, **kwargs):
          '''
          ``objects`` is an iterable. Related objects
              will be attached to elements of this iterable.
  
          ``field_name`` is the attached object attribute name
  
          ``get_injector_object`` is a callable that takes object in `objects`
              iterable. Related objects will be available as an attribute of the
              result of ``get_inject_object(obj)``. It is assumed that ``fk_field``
              points to  ``get_inject_object(obj)``.
  
          ``select_related`` is a list to be passed to select_related method for
              related objects.
  
          All other kwargs will be passed as arguments to queryset filter function.
  
          For example, we need to prefetch user profiles when we display a list of
          comments::
  
              # models.py
              class UserProfile(models.Model):
                  user = models.ForeignKey(User, unique=True)
                  info = models.CharField(max_length=100)
                  objects = models.Manager()
                  injector = RelatedInjector(fk_field='user')
  
              # views.py
              def show_comments(request, obj_id):
                  ...
                  comments = list(Comment.objects.for_model(obj).select_related('user'))
                  UserProfile.injector.inject_to(comments, '_profile_cache',
                                                 lambda comment: comment.user)
  
                  return direct_to_template('comment_list.html', {'comments': comments})
  
              # in comment_list.html
              {% for comment in comments %}
                  <h3>{{ comment.user }}</h3>
                  <h4>{{ comment.user.get_profile.info }}</h4>
                  {{ comment.comment|linebreaks }}
              {% endfor %}
  
          ``comment.user`` attribute will be selected using ``select_related`` and
          ``comment.user._profile_cache`` (exposed by get_profile method) will be
          selected by our injector. So there will be only 2 SQL queries for
          selecting all comments with users and user profiles.
  
          '''
  
          #get related data
          kwargs.update({self.fk_field+'__in': [ get_inject_object(obj).pk for obj in objects ]})
  
          data = self.get_query_set().filter(**kwargs)
          if select_related:
              data = data.select_related(select_related)
  
          data_dict = dict((getattr(item, self.fk_field), item) for item in list(data))
  
          # add info to original data
          for obj in objects:
              injected_obj = get_inject_object(obj)
  
              if data_dict.has_key(injected_obj):
                  # fk_field was ForeignKey so there are objects in lookup dict
                  get_inject_object(obj).__setattr__(field_name, data_dict[injected_obj])
  
              elif data_dict.has_key(injected_obj.pk):
                  # fk_field was simple IntegerField so there are pk's in lookup dict
                  get_inject_object(obj).__setattr__(field_name, data_dict[injected_obj.pk])