from django.core.serializers import serialize from django.utils.simplejson import dumps, loads, JSONEncoder from django.db.models.query import QuerySet from django.utils.functional import curry class DjangoJSONEncoder(JSONEncoder): def default(self, obj): if isinstance(obj, QuerySet): # `default` must return a python serializable # structure, the easiest way is to load the JSON # string produced by `serialize` and return it return loads(serialize('json', obj, fields=('id', 'name'))) return JSONEncoder.default(self,obj) # partial function, we can now use dumps(my_dict) instead # of dumps(my_dict, cls=DjangoJSONEncoder) dumps = curry(dumps, cls=DjangoJSONEncoder) def to_ajax(rows, filter_field, slug_field=None): ret = [] for row in rows: ret.append( {'id': row.id, 'text': getattr(row, filter_field), 'slug': getattr(row, slug_field) if slug_field else '' } ) return ret