Source Code for Me (s-c.me)

Allows you to paste souce code to blogs! Adapted for Twitter! Here is Search Form in case you missed your code.
Code:
Selected Language:
Show Linenumbers:
Short link for Twitter:
HTML:

HTML view:

Copy Source | Copy HTML
  1. def load_related_generic(object_list, field='content_object'):
  2.     if not object_list:
  3.         return object_list
  4.     related_field = getattr(object_list.model, field)
  5.     ct_field = object_list.model._meta.get_field(related_field.ct_field).get_attname()
  6.     fk_field = object_list.model._meta.get_field(related_field.fk_field).get_attname()
  7.     result = {}
  8.     to_retrive = {}
  9.     for item in object_list:
  10.         ct_id = getattr(item, ct_field)
  11.         fk_id = getattr(item, fk_field)
  12.         if ct_id not in to_retrive:
  13.             to_retrive[ct_id] = {'model': getattr(item, related_field.ct_field).model_class(), 'pks': set([])}
  14.         to_retrive[ct_id]['pks'].update([fk_id])
  15.     for key in to_retrive:
  16.         objects = to_retrive[key]['model']._default_manager.filter(pk__in=list(to_retrive[key]['pks']))
  17.         result[key] = dict([[obj.pk, obj] for obj in objects])
  18.     for item in object_list:
  19.         setattr(item, field, result[getattr(item, ct_field)][int(getattr(item, fk_field))])
  20. def load_related_fk(object_list, field):
  21.     if not object_list:
  22.         return object_list
  23.     related_field = object_list.model._meta.get_field(field)
  24.     attname = related_field.get_attname()
  25.     pks = list(set([getattr(obj, attname) for obj in object_list if getattr(obj, attname)]))
  26.     objects = related_field.rel.to._default_manager.filter(pk__in=pks)
  27.     related_dict = {}
  28.     for obj in objects:
  29.         related_dict[obj.pk] = obj
  30.     for obj in object_list:
  31.         try:
  32.             setattr(obj, field, related_dict[getattr(obj, attname)])
  33.         except KeyError:
  34.             pass
  35.     return object_list




Based on Manoli.Net's CodeFormatter. Made by Topbot (c) 2008-2012