| 1234567891011121314151617181920212223242526 |
- 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)
|