      Signal subclass that allows the sender to be lazily specified as a string
      of the `app_label.ModelName` form.
      """
      def _lazy_method(self, method, apps, receiver, sender, **kwargs):
          # This partial takes a single optional argument named "sender".
          partial_method = partial(method, receiver, **kwargs)
          if isinstance(sender, six.string_types):
              apps = apps or Options.default_apps
 
</s> remove         # import models here to avoid a circular import
        from django.db import models
        if isinstance(sender, models.Model) or sender is None:
            # Skip lazy_model_operation to get a return value for disconnect()
 </s> add         if isinstance(sender, six.string_types):
            apps = apps or Options.default_apps
            apps.lazy_model_operation(partial_method, make_model_tuple(sender))
        else: </s> remove         apps = apps or models.base.Options.default_apps
        apps.lazy_model_operation(partial_method, make_model_tuple(sender))
 </s> add 
        from django.db.models.options import Options

      Signal subclass that allows the sender to be lazily specified as a string
      of the `app_label.ModelName` form.
      """
      def _lazy_method(self, method, apps, receiver, sender, **kwargs):
        from django.db.models.options import Options

          # This partial takes a single optional argument named "sender".
          partial_method = partial(method, receiver, **kwargs)
          if isinstance(sender, six.string_types):
              apps = apps or Options.default_apps
keep keep keep add keep keep keep keep
 Fixed #26686 -- Fixed crash when registering model signals with abstract senders. 
django/db/models/signals.py