def model_facet_counts(self): """ Get facet counts, same as facet_counts(), but convert any ForeignKeyField and ManyToManyField values into LazyModel instances. """ engine = connections[self.query.backend.connection_alias] unified_index = engine.get_unified_index() fields = unified_index.fields facet_counts = self.facet_counts() facet_fields = facet_counts.get('fields', {}) for field_name, values in facet_fields.items(): field = fields.get(field_name) if isinstance(field, (ForeignKeyField, ManyToManyField)): new_values = [] for identifier, count in values: value = LazyModel(identifier) new_values.append((value, count)) facet_fields[field_name] = new_values return facet_counts
def __init__(self, *args, **kwargs): if len(args) == 1 and isinstance(args[0], (Manager, QuerySet)): value = args[0] if isinstance(value, Manager): value = value.all() model = value.model pk_list = value.values_list('pk', flat=True) self.query_string = [ LazyModel.get_identifier(model, pk) for pk in pk_list ] else: lazy_object = LazyModel(*args, **kwargs) if lazy_object.object_pk: self.query_string = LazyModel.get_identifier(lazy_object) else: model = LazyModel.get_model_class(lazy_object) raise model.DoesNotExist('%s with lookup %s does not exist.' % ( model.__name__, kwargs, )) self.kwargs = kwargs
def convert(self, value): """Returns a lazy object which fetches the related object.""" if value: return LazyModel(value)
def convert(self, value): """Returns a fake manager object for accessing the lazy objects.""" values = (LazyModel(item) for item in value or []) return ManyToManyManager(*values)
def object(self): if self._object is None: self._object = LazyModel(self.model, self.pk) return self._object