47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
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
|