code: def introspect(self, model, exclude=()):
          
          result = {}
          open_set = deque([model])
          closed_set = list(exclude)
  
          while open_set:
              model = open_set.popleft()
              model_label = self.model_label(model)
  
              if model_label in closed_set:
                  continue
  
              model_fields = OrderedDict()
              for field in self.get_fields(model):
                  if not isinstance(field, DjangoQLField):
                      field = self.get_field_instance(model, field)
                  if not field:
                      continue
                  if isinstance(field, RelationField):
                      if field.relation not in closed_set:
                          model_fields[field.name] = field
                          open_set.append(field.related_model)
                  else:
                      model_fields[field.name] = field
  
              result[model_label] = model_fields
              closed_set.append(model_label)
  
          return result
docs: Start with given model and recursively walk through its relationships.
  
          Returns a dict with all model labels and their fields found.