def handle(self, *args, **kwargs): query = ' '.join(args) versions = kwargs.get('versions') db, enquiry = enquire(query, versions) mset = enquiry.get_mset(0, db.get_doccount()) pks = [match.document.get_data() for match in mset] # filter doesn't guarantee an order, so we need to get all the # possible models then look them up to get the ordering # returned by xapian. This hits the database all at once, rather # than pagesize times. extension_lookup = {} for extension in Extension.objects.filter(pk__in=pks): extension_lookup[str(extension.pk)] = extension extensions = [extension_lookup[pk] for pk in pks] for ext in extensions: print ext.name