code: def create_history_model(self, model, inherited):
          
          attrs = {
              "__module__": self.module,
              "_history_excluded_fields": self.excluded_fields,
          }
  
          app_module = "%s.models" % model._meta.app_label
  
          if inherited:
              # inherited use models module
              attrs["__module__"] = model.__module__
          elif model.__module__ != self.module:
              # registered under different app
              attrs["__module__"] = self.module
          elif app_module != self.module:
              # Abuse an internal API because the app registry is loading.
              app = apps.app_configs[model._meta.app_label]
              models_module = app.name
              attrs["__module__"] = models_module
  
          fields = self.copy_fields(model)
          attrs.update(fields)
          attrs.update(self.get_extra_fields(model, fields))
          # type in python2 wants str as a first argument
          attrs.update(Meta=type(str("Meta"), (), self.get_meta_options(model)))
          if self.table_name is not None:
              attrs["Meta"].db_table = self.table_name
  
          # Set as the default then check for overrides
          name = self.get_history_model_name(model)
  
          registered_models[model._meta.db_table] = model
          return python_2_unicode_compatible(type(str(name), self.bases, attrs))
docs: Creates a historical model to associate with the model provided.