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
Example #2
0
 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)
Example #5
0
 def object(self):
     if self._object is None:
         self._object = LazyModel(self.model, self.pk)
     return self._object