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
|