El marco del sistema de comprobaciones es un conjunto de comprobaciones estáticas para validar proyectos Django. Detecta problemas comunes y proporciona pistas sobre cómo solucionarlos. El marco es extensible, por lo que puedes agregar fácilmente tus propias comprobaciones.
Para obtener detalles sobre cómo agregar tus propias comprobaciones e integrarlas con las comprobaciones de Django, consulta el Guía del tema de comprobaciones.
CheckMessage¶Las advertencias y errores generados por las comprobaciones del sistema deben ser instancias de CheckMessage. Una instancia encapsula un error o advertencia reportable individual, también proporciona contexto e indicaciones aplicables al mensaje, así como una identificador único que se utiliza para fines de filtrado.
Los argumentos del constructor son:
La severidad del mensaje. Utiliza uno de los valores predefinidos: DEBUG, INFO, WARNING, ERROR, CRITICAL. Si el nivel es mayor o igual a ERROR, entonces Django evitará que se ejecuten las comandos de gestión. Los mensajes con un nivel inferior a ERROR (es decir, advertencias) se informan en la consola, pero pueden silenciarse.
Una cadena corta (menor que 80 caracteres) que describe el problema. La cadena no debe contener saltos de línea.
Una cadena de una sola línea que proporciona una pista para solucionar el problema. Si no se puede proporcionar ninguna pista, o la pista es evidente del mensaje de error, la pista se puede omitir o se puede utilizar un valor de None.
Opcional. Un objeto que proporciona contexto para el mensaje (por ejemplo, el modelo donde se descubrió el problema). El objeto debe ser un modelo, campo o administrador o cualquier otro objeto que defina el método __str__(). El método se utiliza al informar todos los mensajes y su resultado precede al mensaje.
Optional string. Un identificador único para el problema. Los identificadores deben seguir el patrón applabel.X001, donde X es uno de los caracteres CEWID, que indican la gravedad del mensaje (C para críticos, E para errores y D e I para advertencias). El número puede ser asignado por la aplicación, pero debe ser único dentro de esa aplicación.
Hay subclases para hacer que crear mensajes con niveles comunes sea más fácil. Al utilizarlas puedes omitir el argumento level porque está implícito en el nombre de la clase.
Las siguientes comprobaciones verifican tu configuración para Soporte asíncrono:
async.E001: No debes establecer la variable de entorno DJANGO_ALLOW_ASYNC_UNSAFE en el despliegue. Esto deshabilita la protección contra seguridad asíncrona <async-safety>.
Las comprobaciones de compatibilidad advierten sobre problemas potenciales que podrían ocurrir después de actualizar Django.
2_0.W001: Tu patrón de URL <pattern> tiene una route que contiene (?P<, comienza con un ^, o termina con un $. Esto fue probablemente un olvido al migrar desde url() a path().
4_0.E001: A partir de Django 4.0, los valores en la configuración CSRF_TRUSTED_ORIGINS deben comenzar con un esquema (generalmente http:// o https://) pero se encontró <hostname>.
Las siguientes comprobaciones verifican que tu configuración CACHES esté correctamente configurada:
caches.E001: Debes definir una caché 'default' en tu configuración de CACHES.
caches.W002: La configuración de tu caché <cache> podría exponer tu caché o provocar la corrupción de tus datos porque su ubicación (LOCATION) coincide con/está dentro/de contiene MEDIA_ROOT/STATIC_ROOT/STATICFILES_DIRS.
caches.W003: La caché <cache> de tu configuración tiene una ubicación (LOCATION) relativa. Utiliza un camino absoluto en su lugar.
Si estás utilizando MySQL o MariaDB, se realizarán las siguientes comprobaciones:
mysql.E001: MySQL/MariaDB no permite que los campos CharField únicos tengan un max_length > 255. Esta comprobación fue cambiada a mysql.W003 en Django 3.1, ya que el tamaño máximo real depende de muchos factores.
mysql.W002: El modo estricto de MySQL/MariaDB no está configurado para la conexión de base de datos <alias>. Consulta también Establecer sql_mode.
mysql.W003: MySQL/MariaDB puede no permitir que los campos CharField únicos tengan un max_length > 255.
Los siguientes checks verifican tu configuración para Gestión de archivos:
files.E001: La configuración de la directiva FILE_UPLOAD_TEMP_DIR se refiere a un directorio inexistente <path>.
fields.E001: Los nombres de campo no deben terminar con un guión bajo.
fields.E002: Los nombres de campo no deben contener "__".
fields.E003: pk es una palabra reservada que no puede usarse como nombre de campo.
fields.E004: choices debe ser un mapeo (por ejemplo, un diccionario) o un iterable (por ejemplo, una lista o tupla).
fields.E005: choices debe ser un mapeo de valores reales a nombres legibles por humanos o un iterable que contenga tuplas (valor real, nombre legible por humanos).
fields.E006: db_index debe ser None, True o False.
fields.E007: Las claves primarias no deben tener null=True.
fields.E008: Todos los validators deben ser llamables.
fields.E009: longitud_maxima es demasiado pequeña para caber en el valor más largo de opciones (<conteo> caracteres).
fields.E010: <field> el valor por defecto debería ser una función llamable en lugar de una instancia para evitar que se comparta entre todas las instancias del campo.
fields.E011: <database> no admite valores de base de datos predeterminados con expresiones (db_default).
fields.E012: <expresión> no se puede utilizar en db_default.
fields.E013: Clave primaria compuesta debe llamarse pk.
fields.E100: AutoFields debe establecer primary_key=True.
fields.E110: Campo de Booleano no acepta valores nulos. Esta comprobación apareció antes de que se agregara el soporte para valores nulos en Django 2.1.
fields.E120: Campo de caracteress debe definir una atributo longitud máxima.
fields.E121: longitud máxima debe ser un entero positivo.
fields.W122: max_length se ignora cuando se utiliza con <campo de tipo entero>.
fields.E130: Los campos DecimalField deben definir la atributo decimal_places.
fields.E131: decimal_places debe ser un número entero no negativo.
fields.E132: Los campos DecimalField deben definir el atributo max_digits.
fields.E133: max_digits debe ser un número entero positivo.
fields.E134: max_digits debe ser mayor o igual a decimal_places.
fields.E140: Los campos FilePathField deben tener establecido en True al menos uno de los atributos allow_files o allow_folders.
fields.E150: Los campos GenericIPAddressField no pueden tener blank=True si null=False, ya que los valores en blanco se almacenan como nulls.
fields.E160: Las opciones auto_now, auto_now_add y default son mutuamente excluyentes. Solo puede estar presente una de estas opciones.
fields.W161: Valor por defecto fijo proporcionado.
fields.W162: <database> no admite un índice de base de datos en columnas de <field data type>.
fields.W163: <database> no admite comentarios en columnas (db_comment).
fields.E170: El valor por defecto de BinaryField no puede ser una cadena. Utiliza contenido en bytes en su lugar.
fields.E180: <database> no admite campos JSONFields.
fields.E190: <database> no admite un collation de base de datos en <field_type>s.
fields.E220: <database> no admite campos GeneratedFields.
fields.E221: <database> no admite campos generados no persistidos GeneratedFields.
fields.E222: <database> no admite campos generados persistidos GeneratedFields.
fields.E223: GeneratedField.output_field tiene errores: …
fields.W224: GeneratedField.output_field tiene advertencias: …
fields.E900: La clase IPAddressField ha sido eliminada excepto por el soporte en migraciones históricas.
fields.W900: La clase IPAddressField ha sido deprecada. El soporte para ella (excepto en migraciones históricas) será eliminado en Django 1.9. Esta comprobación apareció en Django 1.7 y 1.8.
fields.W901: La clase CommaSeparatedIntegerField ha sido deprecada. El soporte para ella (excepto en migraciones históricas) será eliminado en Django 2.0. Esta comprobación apareció en Django 1.10 y 1.11.
fields.E901: La clase CommaSeparatedIntegerField ha sido eliminada excepto por el soporte en migraciones históricas.
fields.W902: El campo FloatRangeField está deprecado y será eliminado en Django 3.1. Esta comprobación apareció en Django 2.2 y 3.0.
fields.W903: El campo NullBooleanField está deprecado. El soporte para él (excepto en migraciones históricas) será eliminado en Django 4.0. Esta comprobación apareció en Django 3.1 y 3.2.
fields.E903: El campo NullBooleanField ha sido eliminado excepto por el soporte en migraciones históricas.
fields.W904: El campo django.contrib.postgres.fields.JSONField está deprecado. El soporte para él (excepto en migraciones históricas) será eliminado en Django 4.0. Esta comprobación apareció en Django 3.1 y 3.2.
fields.E904: El campo django.contrib.postgres.fields.JSONField ha sido eliminado excepto por el soporte en migraciones históricas.
fields.W905: El campo django.contrib.postgres.fields.CICharField está deprecado. El soporte para él (excepto en migraciones históricas) será eliminado en Django 5.1. Esta comprobación apareció en Django 4.2 y 5.0.
fields.E905: django.contrib.postgres.fields.CICharField se ha eliminado excepto por el soporte en migraciones históricas.
fields.W906: django.contrib.postgres.fields.CIEmailField está deprecado. El soporte para ella (excepto en migraciones históricas) se eliminará en Django 5.1. Esta comprobación apareció en Django 4.2 y 5.0.
fields.E906: django.contrib.postgres.fields.CIEmailField se ha eliminado excepto por el soporte en migraciones históricas.
fields.W907: django.contrib.postgres.fields.CITextField está deprecado. El soporte para ella (excepto en migraciones históricas) se eliminará en Django 5.1. Esta comprobación apareció en Django 4.2 y 5.0.
fields.E907: django.contrib.postgres.fields.CITextField se ha eliminado excepto por el soporte para migraciones históricas.
fields.E200: unique no es un argumento válido para un campo FileField. Esta comprobación se elimina en Django 1.11.
fields.E201: primary_key no es un argumento válido para un campo FileField.
fields.E202: El argumento upload_to del campo FileField debe ser una ruta relativa, no una ruta absoluta.
fields.E210: No se puede utilizar el campo ImageField porque Pillow no está instalado.
models.E001: <swappable> no es del formulario app_label.app_name.
models.E002: <SETTING> referencia <model>, que no ha sido instalado, o es abstracto.
models.E003: El modelo tiene dos relaciones muchos-a-muchos idénticas a través del modelo intermedio <app_label>.<model>.
models.E004: id solo puede usarse como nombre de campo si el campo también establece primary_key=True.
models.E005: El campo <campo nombre> del modelo padre <modelo> coincide con el campo <campo nombre> del modelo padre <modelo>.
models.E006: El campo <campo nombre> coincide con el campo <campo nombre> del modelo <modelo>.
models.E007: El campo <campo nombre> tiene como nombre de columna <nombre de columna> que está utilizado por otro campo.
models.E008: index_together debe ser una lista o tupla. Esta comprobación apareció antes de Django 5.1.
models.E009: Todos los elementos de index_together deben ser listas o tuplas. Esta comprobación apareció antes de Django 5.1.
models.E010: unique_together debe ser una lista o tupla.
models.E011: Todos los elementos de unique_together deben ser listas o tuplas.
models.E012: constraints/indexes/unique_together se refiere al campo inexistente <campo nombre>.
models.E013: constraints/indexes/unique_together se refiere a un campo ManyToManyField <campo nombre>, pero los campos ManyToManyField no están soportados para esa opción.
models.E014: ordering debe ser una tupla o lista (incluso si quieres ordenar por solo un campo).
models.E015: ordenación se refiere al campo inexistente, campo relacionado o consulta <nombre del campo>.
models.E016: constraints/indexes/unique_together se refiere al campo <nombre_del_campo> que no es local al modelo <modelo>.
models.E017: El modelo de proxy <modelo> contiene campos del modelo.
models.E018: El nombre de columna autogenerado es demasiado largo para el campo <campo>. La longitud máxima es <longitud_máxima> para la base de datos <alias>.
models.E019: El nombre de columna autogenerado es demasiado largo para el campo M2M <campo_M2M>. La longitud máxima es <longitud_máxima> para la base de datos <alias>.
models.E020: El método de clase <modelo>.check() está actualmente sobrescrito.
models.E021: No se pueden utilizar ordenación y order_with_respect_to juntos.
models.E022: <función> contiene una referencia perezosa a <etiqueta_de_aplicación>.<modelo>, pero la aplicación <etiqueta_de_aplicación> no está instalada o no proporciona el modelo <modelo>.
models.E023: El nombre del modelo <modelo> no puede empezar ni terminar con un guión bajo ya que colisiona con la sintaxis de consulta.
models.E024: El nombre del modelo <modelo> no puede contener dos guiones bajo ya que colisiona con la sintaxis de consulta.
models.E025: La propiedad <property name> choca con un acceso a campo relacionado.
models.E026: El modelo no puede tener más de un campo con primary_key=True.
models.W027: <database> no admite restricciones de comprobación.
models.E028: La tabla de base de datos db_table <db_table> se utiliza por múltiples modelos: <model list>.
models.E029: El nombre del índice <index> no es único para el modelo <model>.
models.E030: El nombre del índice <index> no es único entre modelos: <model list>.
models.E031: El nombre de la restricción <constraint> no es único para el modelo <model>.
models.E032: El nombre de la restricción <constraint> no es único entre modelos: <model list>.
models.E033: El nombre del índice <index> no puede comenzar con un guión bajo o un número.
models.E034: El nombre del índice <index> no puede ser más largo que <max_length> caracteres.
models.W035: db_table <db_table> se utiliza por múltiples modelos: <model list>.
models.W036: <database> no admite restricciones únicas con condiciones.
models.W037: <database> no admite índices con condiciones.
models.W038: <database> no admite restricciones únicas diferibles.
models.W039: <database> no admite restricciones únicas con columnas no clave.
models.W040: <database> no admite índices con columnas no clave.
models.E041: constraints se refiere al campo unido <field name>.
models.E042: El nombre del campo <field name> no puede incluirse en la clave primaria compuesta.
models.W042: Se utiliza una clave primaria auto-creada cuando no se define un tipo de clave primaria, por defecto django.db.models.AutoField.
models.W043: <database> no admite índices en expresiones.
models.W044: <database> no admite restricciones únicas en expresiones.
models.W045: La restricción de verificación <constraint> contiene una expresión RawSQL() y no se validará durante la limpieza completa del modelo full_clean().
models.W046: <database> no admite comentarios en tablas (db_table_comment).
models.W047: <database> no admite restricciones únicas con nulos distintos.
models.E048: constraints/indexes/unique_together se refiere a una clave primaria compuesta <field name>, pero las claves primarias compuestas no están soportadas para esa opción.
Los siguientes controles verifican que los comandos de gestión personalizados estén configurados correctamente:
commands.E001: Los comandos migrate y makemigrations deben tener el mismo autodetector.
Los controles de seguridad no hacen que tu sitio sea seguro. No auditorean código, no detectan intrusos ni realizan nada particularmente complejo. En su lugar, ayudan a realizar un checklist automático y de fácil acceso, que puede ayudarte a mejorar la seguridad de tu sitio.
Algunas de estas comprobaciones pueden no ser adecuadas para tu configuración de despliegue particular. Por ejemplo, si haces la redirección HTTP a HTTPS en un equilibrador de carga, te resultará irritante estar constantemente advertido de que no has habilitado SECURE_SSL_REDIRECT. Utiliza SILENCED_SYSTEM_CHECKS para silenciar las comprobaciones innecesarias.
Se ejecutan las siguientes comprobaciones si utilizas la opción check --deploy.
security.W001: No tienes django.middleware.security.SecurityMiddleware en tu MIDDLEWARE, por lo que los ajustes de SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_REFERRER_POLICY, SECURE_CROSS_ORIGIN_OPENER_POLICY y SECURE_SSL_REDIRECT no tendrán efecto.
security.W002: No tienes django.middleware.clickjacking.XFrameOptionsMiddleware en tu MIDDLEWARE, por lo que tus páginas no se servirán con un encabezado 'x-frame-options'. A menos que haya una buena razón para que tu sitio se sirva en una ventana, deberías considerar habilitar este encabezado para ayudar a prevenir ataques de clickjacking.
security.W003: No parece que estés utilizando la protección contra ataques de forja de sitios cruzados (CSRF) mediante el middleware (django.middleware.csrf.CsrfViewMiddleware no está en tu MIDDLEWARE). Habilitar el middleware es la forma más segura de asegurarte de que no dejas ninguna brecha.
security.W004: No has establecido un valor para el ajuste SECURE_HSTS_SECONDS. Si todo tu sitio se sirve solo sobre SSL, podrías considerar establecer un valor y habilitar la <http-strict-transport-security> referida en HTTP Strict Transport Security. Asegúrate de leer la documentación primero; habilitar HSTS con descuido puede causar problemas graves e irreversibles.
security.W005: No has establecido el ajuste SECURE_HSTS_INCLUDE_SUBDOMAINS en True. Sin esto, tu sitio está potencialmente vulnerable a ataques mediante una conexión no segura a un subdominio. Solo establece esto en True si estás seguro de que todos los subdominios de tu dominio deben ser servidos exclusivamente por SSL.
security.W006: El ajuste SECURE_CONTENT_TYPE_NOSNIFF no está configurado para True, por lo que tus páginas no se servirán con un encabezado 'X-Content-Type-Options: nosniff'. Deberías considerar habilitar este encabezado para prevenir que el navegador identifique los tipos de contenido incorrectamente.
security.W007: El ajuste SECURE_BROWSER_XSS_FILTER no está configurado en True, por lo que tus páginas no se servirán con un encabezado 'X-XSS-Protection: 1; mode=block'. Deberías considerar habilitar este encabezado para activar la filtración de XSS del navegador y ayudar a prevenir ataques XSS. Esta comprobación se elimina en Django 3.0 ya que el X-XSS-Protection encabezado no es honrado por los navegadores modernos.
security.W008: El ajuste SECURE_SSL_REDIRECT no está configurado para True. A menos que tu sitio deba estar disponible tanto sobre SSL como conexiones no SSL, podrías considerar establecer este ajuste en True o configurar un equilibrador de carga o servidor proxy inverso para redirigir todas las conexiones a HTTPS.
seguridad.W009: Tu :config:`SECRET_KEY` tiene menos de 50 caracteres, menos de 5 caracteres únicos o está prefijado con 'django-insecure-', lo que indica que se generó automáticamente por Django. Por favor, genera un valor largo y aleatorio, de lo contrario muchas de las características críticas de seguridad de Django serán vulnerables a ataques.
seguridad.W010: Tienes django.contrib.sessions en tus :config:`INSTALLED_APPS`, pero no has establecido :config:`SESSION_COOKIE_SECURE` a True. Utilizar una cookie de sesión solo segura hace más difícil para los sniffers de tráfico de red que roben las sesiones del usuario.
seguridad.W011: Tienes django.contrib.sessions.middleware.SessionMiddleware en tus :config:`MIDDLEWARE`, pero no has establecido :config:`SESSION_COOKIE_SECURE` a True. Utilizar una cookie de sesión solo segura hace más difícil para los sniffers de tráfico de red que roben las sesiones del usuario.
seguridad.W012: No se ha establecido :config:`SESSION_COOKIE_SECURE` a True. Utilizar una cookie de sesión solo segura hace más difícil para los sniffers de tráfico de red que roben las sesiones del usuario.
seguridad.W013: Tienes django.contrib.sessions en tus :config:`INSTALLED_APPS`, pero no has establecido :config:`SESSION_COOKIE_HTTPONLY` a True. Utilizar una cookie de sesión HttpOnly hace más difícil para los ataques de scripting cruzado que roben las sesiones del usuario.
seguridad.W014: Tienes django.contrib.sessions.middleware.SessionMiddleware en tus :config:`MIDDLEWARE`, pero no has establecido :config:`SESSION_COOKIE_HTTPONLY` a True. Utilizar una cookie de sesión HttpOnly hace más difícil para los ataques de scripting cruzado que roben las sesiones del usuario.
seguridad.W015: No se ha establecido :config:`SESSION_COOKIE_HTTPONLY` a True. Utilizar una cookie de sesión HttpOnly hace más difícil para los ataques de scripting cruzado que roben las sesiones del usuario.
seguridad.W016: No se ha establecido :config:`CSRF_COOKIE_SECURE` a True. Utilizar una cookie CSRF solo segura hace más difícil para los sniffers de tráfico de red que roban el token CSRF.
seguridad.W017: No se ha establecido :config:`CSRF_COOKIE_HTTPONLY` a True. Utilizar una cookie CSRF HttpOnly hace más difícil para los ataques de scripting cruzado que roben el token CSRF. Esta comprobación se elimina en Django 1.11 ya que la :config:`CSRF_COOKIE_HTTPONLY` no ofrece ningún beneficio práctico.
seguridad.W018: No debes tener :config:`DEBUG` establecido a True en producción.
security.W019: Tienes django.middleware.clickjacking.XFrameOptionsMiddleware en tu MIDDLEWARE, pero X_FRAME_OPTIONS no está configurado a 'DENY'. A menos que haya una buena razón para que tu sitio sirva otras partes de sí mismo en un marco, deberías cambiarlo a 'DENY'.
security.W020: ALLOWED_HOSTS no debe estar vacío en la implementación.
security.W021: No has configurado el parámetro de configuración SECURE_HSTS_PRELOAD a True. Sin esto, tu sitio no puede ser enviado a la lista de carga previa del navegador.
security.W022: No has configurado el parámetro de configuración SECURE_REFERRER_POLICY. Sin esto, tu sitio no enviará un encabezado Referrer-Policy. Deberías considerar habilitar este encabezado para proteger la privacidad del usuario.
security.E023: Has configurado el parámetro de configuración SECURE_REFERRER_POLICY con un valor inválido.
security.E024: Has configurado el parámetro de configuración SECURE_CROSS_ORIGIN_OPENER_POLICY con un valor inválido.
security.W025: Tu SECRET_KEY_FALLBACKS[n] tiene menos de 50 caracteres, menos de 5 caracteres únicos o está prefijado con 'django-insecure-' lo que indica que fue generado automáticamente por Django. Por favor, genera un valor largo y aleatorio, de otra manera muchas de las características críticas de seguridad de Django serán vulnerables a ataques.
Los siguientes controles verifican que tus configuraciones relacionadas con la seguridad estén correctamente configuradas:
security.E100: DEFAULT_HASHING_ALGORITHM debe ser 'sha1' o 'sha256'. Este control apareció en Django 3.1 y 3.2.
security.E101: La vista de falla CSRF 'path.to.view' no toma el número correcto de argumentos.
security.E102: La vista de falla CSRF 'path.to.view' no pudo ser importada.
signals.E001: <handler> se conectó a la señal <signal> con una referencia perezosa al emisor <app label>.<model>, pero la aplicación <app label> no está instalada o no proporciona el modelo <model>.
Los siguientes controles verifican que su configuración de TEMPLATES esté correctamente configurada:
templates.E001: Tienes 'APP_DIRS': True en su configuración de TEMPLATES, pero también especifica 'loaders' en OPTIONS. O elimine APP_DIRS o elimine la opción 'loaders'.
templates.E002: string_if_invalid en TEMPLATES OPTIONS debe ser una cadena pero obtuvo: {value} ({type}).
templates.E003:<name> se utiliza para múltiples módulos de etiquetas de plantilla: <module list>. Este control cambió a templates.W003 en Django 4.1.2.
templates.W003:<name> se utiliza para múltiples módulos de etiquetas de plantilla: <module list>.
Los siguientes controles se realizan en tu configuración de traducción:
traducción.E001: Has proporcionado un valor inválido para la configuración CÓDIGO_DE_IDIOMA: <valor>.
traducción.E002: Has proporcionado un código de idioma inválido en la configuración IDIOMAS: <valor>.
traducción.E003: Has proporcionado un código de idioma inválido en la configuración IDIOMAS_BIDI: <valor>.
traducción.E004: Has proporcionado un valor para la configuración CÓDIGO_DE_IDIOMA que no está en la configuración IDIOMAS.
Los siguientes controles se realizan en tu configuración de URLs:
urls.W001: Tu patrón de URL <patrón> utiliza include() con una ruta que termina con un $. Elimina el dólar de la ruta para evitar problemas al incluir URLs.
urls.W002: Tu patrón de URL <patrón> tiene una ruta que comienza con un /. Elimina este slash ya que no es necesario. Si este patrón está dirigido a un include(), asegúrate de que el patrón del include() tenga un tramo final /.
urls.W003: Tu patrón de URL <patrón> tiene un nombre que incluye un :. Elimina la colonia para evitar referencias de espacio de nombres ambiguas.
urls.E004: Tu patrón de URL <pattern> es inválido. Asegúrate de que urlpatterns sea una lista de instancias de path() y/o re_path().
urls.W005: El espacio de nombres de URL <namespace> no es único. Es posible que no puedas revertir todas las URLs en este espacio de nombres.
urls.E006: La configuración MEDIA_URL/ STATIC_URL debe terminar con una barra diagonal.
urls.E007: La vista personalizada handlerXXX 'path.to.view' no recibe el número correcto de argumentos (…).
urls.E008: La vista personalizada handlerXXX 'path.to.view' no pudo ser importada.
urls.E009: Tu patrón de URL <pattern> tiene una vista inválida, pasa <view>.as_view() en lugar de <view>.
urls.W010: Tu patrón de URL <pattern> tiene un ángulo incompleto <angle bracket>.
contrib realiza comprobaciones¶admin¶Las comprobaciones de administración se realizan todas como parte del etiqueta admin.
Las siguientes comprobaciones se realizan en cualquier ModelAdmin (o subclase) que esté registrado en el sitio administrativo.
admin.E001: El valor de raw_id_fields debe ser una lista o tupla.
admin.E002: El valor de raw_id_fields[n] se refiere a <field name>, que no es un campo de <model>.
admin.E003: El valor de raw_id_fields[n] debe ser una clave foránea o un campo muchos-a-muchos.
admin.E004: El valor de fields debe ser una lista o tupla.
admin.E005: Ambos fieldsets y fields están especificados.
admin.E006: El valor de fields contiene campos duplicados.
admin.E007: El valor de fieldsets debe ser una lista o tupla.
admin.E008: El valor de fieldsets[n] debe ser una lista o tupla.
admin.E009: El valor de fieldsets[n] debe tener una longitud de 2.
admin.E010: El valor de fieldsets[n][1] debe ser un diccionario.
admin.E011: El valor de fieldsets[n][1] debe contener la clave fields.
admin.E012: Hay campos duplicados en fieldsets[n][1].
admin.E013: El valor de fields[n]/filter_horizontal[n]/filter_vertical[n]/fieldsets[n][m] no puede incluir el campo ManyToManyField <field name>, porque ese campo especifica manualmente un modelo relacionado.
admin.E014: El valor de exclude debe ser una lista o tupla.
admin.E015: El valor de exclude contiene campos duplicados.
admin.E016: El valor de form debe heredar de BaseModelForm.
admin.E017: El valor de filter_vertical debe ser una lista o tupla.
admin.E018: El valor de filter_horizontal debe ser una lista o tupla.
admin.E019: El valor de filter_vertical[n]/filter_horizontal[n] se refiere a <field name>, que no es un campo de <model>.
admin.E020: El valor de filter_vertical[n]/filter_horizontal[n] debe ser un campo muchos-a-muchos.
admin.E021: El valor de radio_fields debe ser un diccionario.
admin.E022: El valor de radio_fields se refiere a <field name>, que no es un campo de <model>.
admin.E023: El valor de radio_fields se refiere a <field name>, que no es una instancia de ForeignKey, y no tiene definición de choices.
admin.E024: El valor de radio_fields[<field name>] debe ser ya sea admin.HORIZONTAL o admin.VERTICAL.
admin.E025: El valor de view_on_site debe ser una función callable o un valor booleano.
admin.E026: El valor de prepopulated_fields debe ser un diccionario.
admin.E027: El valor de prepopulated_fields se refiere a <field name>, que no es un campo de <model>.
admin.E028: El valor de prepopulated_fields se refiere a <field name>, que no debe ser un campo DateTimeField, ForeignKey, OneToOneField o ManyToManyField.
admin.E029: El valor de prepopulated_fields[<field name>] debe ser una lista o tupla.
admin.E030: El valor de prepopulated_fields se refiere a <field name>, que no es un campo de <model>.
admin.E031: El valor de ordering debe ser una lista o tupla.
admin.E032: El valor de ordering tiene el marcador de ordenación aleatorio ?, pero contiene otros campos además.
admin.E033: El valor de ordering se refiere a <field name>, que no es un campo de <model>.
admin.E034: El valor de readonly_fields debe ser una lista o tupla.
admin.E035: El valor de readonly_fields[n] se refiere a <field_name>, que no es un llamable, una atributo de <ModelAdmin class> o un atributo de <model>.
admin.E036: El valor de autocomplete_fields debe ser una lista o tupla.
admin.E037: El valor de autocomplete_fields[n] se refiere a <field name>, que no es un campo de <model>.
admin.E038: El valor de autocomplete_fields[n] debe ser una clave foránea o un campo muchos-a-muchos.
admin.E039: Un administrador para el modelo <model> tiene que estar registrado para poder referirse a él en <modeladmin>.autocomplete_fields.
admin.E040: <modeladmin> debe definir search_fields, porque está referenciado por <other_modeladmin>.autocomplete_fields.
Se realizan las siguientes comprobaciones en cualquier ModelAdmin que esté registrado en el sitio administrativo:
admin.E101: El valor de save_as debe ser un booleano.
admin.E102: El valor de save_on_top debe ser un booleano.
admin.E103: El valor de inlines debe ser una lista o tupla.
admin.E104: <InlineModelAdmin class> debe heredar de InlineModelAdmin.
admin.E105: <InlineModelAdmin class> debe tener un atributo model.
admin.E106: El valor de <InlineModelAdmin class>.model debe ser una Model.
admin.E107: El valor de list_display debe ser una lista o tupla.
admin.E108: El valor de list_display[n] se refiere a <label>, que no es un llamable o atributo de <ModelAdmin class>, ni un atributo, método o campo en <model>.
admin.E109: El valor de list_display[n] no puede ser un campo muchos-a-muchos o una clave foránea inversa.
admin.E110: El valor de list_display_links debe ser una lista, tupla o None.
admin.E111: El valor de list_display_links[n] se refiere a <label>, que no está definido en list_display.
admin.E112: El valor de list_filter debe ser una lista o tupla.
admin.E113: El valor de list_filter[n] debe heredar de ListFilter.
admin.E114: El valor de list_filter[n] no puede heredar de FieldListFilter.
admin.E115: El valor de list_filter[n][1] debe heredar de FieldListFilter.
admin.E116: El valor de list_filter[n] se refiere a <label>, que no se refiere a un Campo.
admin.E117: El valor de list_select_related debe ser un booleano, tupla o lista.
admin.E118: El valor de list_per_page debe ser un entero.
admin.E119: El valor de list_max_show_all debe ser un entero.
admin.E120: El valor de list_editable debe ser una lista o tupla.
admin.E121: El valor de list_editable[n] se refiere a <label>, que no es un campo de <model>.
admin.E122: El valor de list_editable[n] se refiere a <label>, que no está contenido en list_display.
admin.E123: El valor de list_editable[n] no puede estar en ambos list_editable y list_display_links.
admin.E124: El valor de list_editable[n] se refiere al primer campo en list_display (<label>), que no se puede utilizar a menos que esté configurado list_display_links.
admin.E125: El valor de list_editable[n] se refiere a <field name>, que no es editable a través del admin.
admin.E126: El valor de search_fields debe ser una lista o tupla.
admin.E127: El valor de date_hierarchy se refiere a <field name>, que no se refiere a un Campo.
admin.E128: El valor de date_hierarchy debe ser un campo DateField o DateTimeField.
admin.E129: <modeladmin> debe definir un método has_<foo>_permission() para la acción <action>.
admin.E130: Los atributos __name__ de las acciones definidas en <modeladmin> deben ser únicos. El nombre <name> no es único.
InlineModelAdmin¶Se realizan los siguientes controles en cualquier InlineModelAdmin que se registre como inline en un ModelAdmin.
admin.E201: No se puede excluir el campo <field name>, porque es la clave foránea al modelo padre <app_label>.<model>.
admin.E202: El modelo <model> no tiene una clave foránea a <parent model>. O bien, el modelo <model> tiene más de una clave foránea a <parent model>. Debe especificar un atributo fk_name.
admin.E203: El valor de extra debe ser un entero.
admin.E204: El valor de max_num debe ser un entero.
admin.E205: El valor de min_num debe ser un entero.
Los textos traducidos son:
GenericInlineModelAdmin¶Se realizan las siguientes comprobaciones en cualquier GenericInlineModelAdmin que se registre como inline en un ModelAdmin.
admin.E301: <model> no tiene GenericForeignKey.
admin.E302: 'ct_field' referencia <label>, que no es un campo de <model>.
admin.E303: 'ct_fk_field' referencia <label>, que no es un campo de <model>.
admin.E304: <model> no tiene GenericForeignKey utilizando el campo de tipo de contenido <field name> y el campo ID del objeto <field name>.
AdminSite¶Se realizan las siguientes comprobaciones en la instancia predeterminada AdminSite:
admin.E401: Debe estar presente django.contrib.contenttypes en INSTALLED_APPS para utilizar la aplicación de administración.
admin.E402: django.contrib.auth.context_processors.auth debe estar habilitado en DjangoTemplates (TEMPLATES) si se utiliza el backend de autenticación por defecto para utilizar la aplicación administrativa.
admin.E403: Debe configurarse una instancia de django.template.backends.django.DjangoTemplates en TEMPLATES para utilizar la aplicación administrativa.
admin.E404: django.contrib.messages.context_processors.messages debe estar habilitado en DjangoTemplates (TEMPLATES) para utilizar la aplicación administrativa.
admin.E405: django.contrib.auth debe estar en INSTALLED_APPS para utilizar la aplicación administrativa.
admin.E406: django.contrib.messages debe estar en INSTALLED_APPS para utilizar la aplicación administrativa.
admin.E408: django.contrib.auth.middleware.AuthenticationMiddleware debe estar en MIDDLEWARE para utilizar la aplicación administrativa.
admin.E409: django.contrib.messages.middleware.MessageMiddleware debe estar en MIDDLEWARE para utilizar la aplicación administrativa.
admin.E410: django.contrib.sessions.middleware.SessionMiddleware debe estar en MIDDLEWARE para utilizar la aplicación administrativa.
admin.W411: django.template.context_processors.request debe estar habilitado en DjangoTemplates (TEMPLATES) para utilizar el menú de navegación lateral de la aplicación administrativa.
auth¶auth.E001: CAMPOS_REQUERIDOS debe ser una lista o tupla.
auth.E002: El campo denominado como el CAMPO_DE_USUARIO para un modelo de usuario personalizado no puede incluirse en CAMPOS_REQUERIDOS.
auth.E003: <campo> debe ser único porque se lo ha nombrado como el CAMPO_DE_USUARIO.
auth.W004: <campo> se llama CAMPO_DE_USUARIO, pero no es único.
auth.E005: La permiso codenominada <codename> choca con una permiso de sistema para el modelo <modelo>.
auth.E006: El permiso codenominado <codename> se duplica para el modelo <modelo>.
auth.E007: El nombre verbal del modelo <modelo> debe ser como máximo 244 caracteres para que los nombres de permisos de sistema sean como máximo 255 caracteres.
auth.E008: El permiso llamado <nombre> del modelo <modelo> es más largo que 255 caracteres.
auth.C009: <modelo de usuario>.is_anonymous debe ser un atributo o propiedad en lugar de una función. Ignorar esto es un problema de seguridad ya que los usuarios anónimos se tratarán como autenticados!
auth.C010: <modelo de usuario>.is_authenticated debe ser un atributo o propiedad en lugar de una función. Ignorar esto es un problema de seguridad ya que los usuarios anónimos se tratarán como autenticados!
auth.E011: El nombre del modelo <model> debe ser como máximo de 93 caracteres para que sus nombres de permiso internos sean como máximo de 100 caracteres.
auth.E012: El codenombre de permiso <codename> del modelo <model> es más largo que 100 caracteres.
auth.E013: Para utilizar la clase django.contrib.auth.middleware.LoginRequiredMiddleware, la clase django.contrib.auth.middleware.AuthenticationMiddleware debe estar definida antes de ella en MIDDLEWARE.
contenttypes¶Se realizan las siguientes comprobaciones cuando un modelo contiene una relación genérica GenericForeignKey o GenericRelation:
contenttypes.E001: El objeto ID de la GenericForeignKey referencia el campo no existente <field>.
contenttypes.E002: El tipo de contenido de la GenericForeignKey referencia el campo no existente <field>.
contenttypes.E003: <field> no es una ForeignKey.
contenttypes.E004: <field> no es una ForeignKey a contenttypes.ContentType.
contenttypes.E005: Los nombres de modelos deben ser como máximo de 100 caracteres.
postgres¶Las siguientes comprobaciones se realizan en los campos de modelo django.contrib.postgres:
postgres.E001: Campo base para arrays tiene errores: …
postgres.E002: El campo base para arrays no puede ser un campo relacionado.
postgres.E003: <campo> debe tener una función por defecto en lugar de una instancia para evitar que se comparta entre todos los instancias del campo. Esta comprobación cambió a fields.E010 en Django 3.1.
postgres.W004: Campo base para arrays tiene advertencias: …
sites¶Las siguientes comprobaciones se realizan en cualquier modelo que utilice un CurrentSiteManager:
sites.E001: CurrentSiteManager no pudo encontrar un campo llamado <nombre del campo>.
sites.E002: CurrentSiteManager no puede utilizar <campo> ya que no es una clave foránea o un campo muchos-a-muchos.
Los siguientes textos están traducidos manteniendo todas sus etiquetas intactas:
sitios.E101: El parámetro de configuración SITE_ID debe ser un entero.
archivos estáticos¶Las siguientes comprobaciones verifican que django.contrib.staticfiles está correctamente configurado:
staticfiles.E001: El parámetro de configuración STATICFILES_DIRS no es una tupla o lista.
staticfiles.E002: El parámetro de configuración STATICFILES_DIRS no debe contener el parámetro de configuración STATIC_ROOT.
staticfiles.E003: La ruta <prefix> en el parámetro de configuración STATICFILES_DIRS no debe terminar con una barra diagonal.
staticfiles.W004: El directorio <directory> en el parámetro de configuración STATICFILES_DIRS no existe.
staticfiles.E005: El parámetro de configuración STORAGES debe definir un almacenamiento staticfiles.
may 31, 2026