code: def _add_filters(self, **filters):
          
          string_filters = filters.copy()
  
          for key, value in filters.items():
  
              is_extended = False
  
              if isinstance(value, RedisField):
                  # we will fetch the value when running the collection
                  if (not isinstance(value, SingleValueField)
                      or getattr(value, '_instance', None) is None):
                      raise ValueError('If a field is used as a filter value, it '
                                       'must be a simple value field attached to '
                                       'an instance')
                  is_extended = True
  
              elif isinstance(value, RedisModel):
                  # we will fetch the PK when running the collection
                  is_extended = True
  
              if is_extended:
                  if self._field_is_pk(key):
                      # create an RawFilter which will be used in _get_pk
                      raw_filter = RawFilter(key, value)
                      self._lazy_collection['pks'].add(raw_filter)
                  else:
                      # create an ParsedFilter which will be used in _prepare_sets
                      index, suffix, extra_field_parts = self._parse_filter_key(key)
                      parsed_filter = ParsedFilter(index, suffix, extra_field_parts, value)
                      self._lazy_collection['sets'].append(parsed_filter)
  
                  string_filters.pop(key)
  
          super(ExtendedCollectionManager, self)._add_filters(**string_filters)
  
          return self
docs: In addition to the normal _add_filters, this one accept RedisField objects
          on the right part of a filter. The value will be fetched from redis when
          calling the collection.
          The filter value can also be a model instance, in which case its PK will
          be fetched when calling the collection, too.