code: def filter(self, *args, **kwargs):
          
          if args or kwargs:
              self.q_filters = Q(self.q_filters & Q(*args, **kwargs))
          return self
docs: Apply filters to the existing nodes in the set.
  
          :param kwargs: filter parameters
  
              Filters mimic Django's syntax with the double '__' to separate field and operators.
  
              e.g `.filter(salary__gt=20000)` results in `salary > 20000`.
  
              The following operators are available:
  
               * 'lt': less than
               * 'gt': greater than
               * 'lte': less than or equal to
               * 'gte': greater than or equal to
               * 'ne': not equal to
               * 'in': matches one of list (or tuple)
               * 'isnull': is null
               * 'regex': matches supplied regex (neo4j regex format)
               * 'exact': exactly match string (just '=')
               * 'iexact': case insensitive match string
               * 'contains': contains string
               * 'icontains': case insensitive contains
               * 'startswith': string starts with
               * 'istartswith': case insensitive string starts with
               * 'endswith': string ends with
               * 'iendswith': case insensitive string ends with
  
          :return: self