content: from django.apps import apps
  from django.contrib.contenttypes.models import ContentType
  from django.db.utils import ProgrammingError
  
  from utilities.querysets import RestrictedQuerySet
  
  __all__ = (
      'ObjectChangeQuerySet',
  )
  
  
  class ObjectChangeQuerySet(RestrictedQuerySet):
  
      def valid_models(self):
          # Exclude any change records which refer to an instance of a model that's no longer installed. This
          # can happen when a plugin is removed but its data remains in the database, for example.
          try:
              content_types = ContentType.objects.get_for_models(*apps.get_models()).values()
          except ProgrammingError:
              # Handle the case where the database schema has not yet been initialized
              content_types = ContentType.objects.none()
  
          content_type_ids = set(
              ct.pk for ct in content_types
          )
          return self.filter(changed_object_type_id__in=content_type_ids)
  