code: def get_field_info(self, field):
          
          field_info = OrderedDict()
          for attr in ('required', 'read_only', 'default', 'label'):
              field_info[attr] = getattr(field, attr)
          if field_info['default'] is empty:
              field_info['default'] = None
          if hasattr(field, 'immutable'):
              field_info['immutable'] = field.immutable
          field_info['nullable'] = field.allow_null
          if hasattr(field, 'choices'):
              field_info['choices'] = [
                  {
                      'value': choice_value,
                      'display_name': force_text(choice_name, strings_only=True)
                  }
                  for choice_value, choice_name in field.choices.items()
              ]
          many = False
          if isinstance(field, DynamicRelationField):
              field = field.serializer
          if isinstance(field, ListSerializer):
              field = field.child
              many = True
          if isinstance(field, ModelSerializer):
              type = 'many' if many else 'one'
              field_info['related_to'] = field.get_plural_name()
          else:
              type = self.label_lookup[field]
  
          field_info['type'] = type
          return field_info
docs: Adds `related_to` and `nullable` to the metadata response.