docs: def process_m2m(self, obj, pk_set=None, action=None, update_fields=None, cache_key=None, **kwargs):
          """Process signals from dependencies.
  
          Remove signal is processed in two parts. For details see:
          :func:`~Dependency.connect`
          """
          if action not in (None, 'post_add', 'pre_remove', 'post_remove', 'post_clear'):
              return
  
          if action == 'post_remove':
              build_kwargs = self.remove_cache.take(cache_key)
          else:
              build_kwargs = self._get_build_kwargs(obj, pk_set, action, update_fields, **kwargs)
  
          if action == 'pre_remove':
              self.remove_cache.set(cache_key, build_kwargs)
              return
  
          if build_kwargs:
              self.index.build(**build_kwargs)