from itertools import chain from django.apps import apps from django.core.checks import Error def check_generic_foreign_keys(app_configs=None, **kwargs): from .fields import GenericForeignKey if app_configs is None: models = apps.get_models() else: models = chain.from_iterable(app_config.get_models() for app_config in app_configs) errors = [] fields = ( obj for model in models for obj in vars(model).values() if isinstance(obj, GenericForeignKey) ) for field in fields: errors.extend(field.check()) return errors def check_model_name_lengths(app_configs=None, **kwargs): if app_configs is None: models = apps.get_models() else: models = chain.from_iterable(app_config.get_models() for app_config in app_configs) errors = [] for model in models: if len(model._meta.model_name) > 100: errors.append( Error( 'Model names must be at most 100 characters (got %d).' % ( len(model._meta.model_name), ), obj=model, id='contenttypes.E005', ) ) return errors