Infrastructure de contrôle système

L’infrastructure de contrôle système est un ensemble de contrôles statiques pour valider les projets Django. Elle détecte les problèmes courants et fournit des conseils sur la façon de les corriger. L’infrastructure est extensible de sorte que vous pouvez facilement ajouter vos propres contrôles.

Pour plus de détails sur la façon d’ajouter vos propres contrôles et les intégrer aux contrôles systèmes de Django, consultez le Guide thématique sur la vérification système.

Référence de l’API

CheckMessage

class CheckMessage(level, msg, hint=None, obj=None, id=None)[source]

Les avertissements et les erreurs signalés par les contrôles systèmes doivent être des instances de CheckMessage. Une instance encapsule une seule erreur à signaler ou un seul avertissement. Elle fournit également des indicateurs et le contexte applicables au message, et un identifiant unique qui est utilisé à des fins de filtrage.

Les arguments du constructeur sont :

level
La gravité du message. Utilisez l’une des valeurs prédéfinies : DEBUG, INFO, WARNING, ERROR, CRITICAL. Si le niveau est supérieur ou égal à ERROR, Django empêchera l’exécution des commandes de gestion. Les messages avec un niveau inférieur à ERROR (i.e. les avertissements) sont présentés dans la console, mais peuvent être réduits au silence.
msg
Une courte chaîne (moins de 80 caractères) décrivant le problème. La chaîne ne doit pas contenir des sauts de ligne.
hint
Une chaîne d’une seule ligne offrant un indicateur pour résoudre le problème. Si aucun indicateur ne peut être fourni, ou s’il est évident à partir du message d’erreur, l’indicateur peut être omis, ou une valeur None peut être utilisée.
obj
Facultatif. Un objet fournissant le contexte du message (par exemple, le modèle où le problème a été découvert). L’objet doit être un modèle, un champ, un gestionnaire ou tout autre objet qui définit la méthode __str__(). La méthode est utilisée lors de la collecte de tous les messages et son résultat précède le message.
id
Chaîne facultative. Un identifiant unique pour le problème. Les identifiants doivent suivre le modèle applabel.X001, où X est l’une des lettres CEWID, indiquant la gravité du message (C pour critique, E pour les erreurs et ainsi de suite). Le numéro peut être attribué par l’application, mais doit être unique au sein de cette application.

Il existe des sous-classes pour faciliter la création des messages avec les niveaux de base. Lorsque vous les utilisez, vous pouvez omettre le paramètre level car il est sous-entendu par le nom de la classe.

class Debug(msg, hint=None, obj=None, id=None)[source]
class Info(msg, hint=None, obj=None, id=None)[source]
class Warning(msg, hint=None obj=None, id=None)[source]
class Error(msg, hint=None, obj=None, id=None)[source]
class Critical(msg, hint=None, obj=None, id=None)[source]

Étiquettes prédéfinies

Les contrôles systèmes de Django sont organisés en utilisant les étiquettes suivantes :

  • admin: contrôles de toutes les déclarations de sites d’administration.
  • caches: contrôle la configuration liée aux caches (mémoire tampon).
  • compatibility: identification de problèmes potentiels avec les mises à jour.
  • database: vérifie des problèmes de configuration liés aux bases de données. Les contrôles de base de données ne sont pas exécutés par défaut car ils font plus que de l’analyse de code statique comme le font les autres contrôles. Ils ne sont lancés que par la commande migrate ou si vous indiquez l’étiquette database lors de l’appel à la commande check.
  • models: contrôles régissant les définitions de modèles, champs et gestionnaires.
  • security: contrôle la configuration liée à la sécurité.
  • signals: contrôles des déclarations de signaux et des enregistrements de gestionnaires.
  • staticfiles: contrôle la configuration liée à django.contrib.staticfiles.
  • templates: contrôle la configuration liée aux gabarits.
  • urls: contrôle la configuration des URL.

Certains contrôles peuvent être enregistrés sous plusieurs étiquettes.

Vérifications systèmes du noyau

Rétrocompatibilité

Les contrôles de compatibilité alertent sur des problèmes potentiels pouvant se produire après une mise à jour de Django.

  • 2_0.W001 : le motif d’URL <pattern> possède une route contenant (?P<, commençant par ^ ou se terminant par $. Il s’agit probablement d’un oubli lors du passage de url() à path().

Caches

Les contrôles suivants vérifient que le réglage CACHES est configuré correctement :

  • caches.E001 : vous devez définir un cache 'default' dans votre réglage CACHES.

Base de données

MySQL

Si vous utilisez MySQL, les contrôles suivants seront effectués :

  • mysql.E001 : MySQL ne permet pas aux champs CharField uniques d’avoir un attribut max_length > 255.
  • mysql.W002 : le mode strict de MySQL n’est pas défini pour la connection de base de données “<alias>”. Voir aussi Définition de sql_mode.

Champs de modèle

  • fields.E001 : les noms de champ ne doivent pas se terminer par un trait de soulignement.
  • fields.E002 : les noms de champ ne doivent pas contenir "__".
  • fields.E003* : pk est un mot réservé et ne peut pas être utilisé comme nom de champ.
  • fields.E004 : choices doit être un élément itérable (par ex. une liste ou un tuple).
  • fields.E005 : choices doit être un élément itérable renvoyant des tuples (valeur réelle, nom convivial).
  • fields.E006 : db_index ne peut contenir que None, True ou False.
  • fields.E007 : les clés primaires ne peuvent pas contenir null=True.
  • fields.E008 : tous les validators doivent être exécutables.
  • fields.E100 : les champs AutoField doivent déclarer primary_key=True.
  • fields.E110 : les champs BooleanField n’acceptent pas les valeurs nulles.
  • fields.E120 : les champs CharField doivent définir un attribut max_length.
  • fields.E121 : max_length doit être un entier positif.
  • fields.W122 : max_length est ignoré lorsqu’il est utilisé pour un champ IntegerField.
  • fields.E130 : les champs DecimalField doivent définir un attribut decimal_places.
  • fields.E131 : decimal_places doit être un entier non négatif.
  • fields.E132 : les champs DecimalField doivent définir un attribut max_digits.
  • fields.E133 : max_digits doit être un entier non négatif.
  • fields.E134 : max_digits doit être supérieur ou égal à decimal_places.
  • fields.E140 : les champs FilePathField doivent comporter l’un des deux attributs allow_files et allow_folders défini à True.
  • fields.E150 : les champs GenericIPAddressField ne peuvent pas accepter de valeurs vides si les valeurs nulles ne sont pas autorisées, car les valeurs vides sont stockées sous forme de valeurs nulles.
  • fields.E160 : les options auto_now, auto_now_add et default sont mutuellement exclusives. Une seule de ces options doit être conservée.
  • fields.W161 : une valeur par défaut fixe est indiquée.
  • fields.W162: <database> does not support a database index on <field data type> columns.
  • fields.E900 : IPAddressField a été supprimé, sauf pour la prise en charge de migrations historiques.
  • fields.W900 : IPAddressField est obsolète. Sa prise en charge (à l’exception des migrations historiques) sera supprimée dans Django 1.9. Ce contrôle apparaît dans Django 1.7 et 1.8.
  • fields.W901: CommaSeparatedIntegerField has been deprecated. Support for it (except in historical migrations) will be removed in Django 2.0. This check appeared in Django 1.10 and 1.11.
  • fields.E901: CommaSeparatedIntegerField is removed except for support in historical migrations.

Champs de type fichier

  • fields.E200 : unique n’est pas un paramètre valable pour un champ FileField. Ce contrôle est supprimé dans Django 1.11.
  • fields.E201 : primary_key n’est pas un paramètre valable pour un champ FileField.
  • fields.E202 : le paramètre upload_to de FileField doit être un chemin relatif, et non absolu.
  • fields.E210 : impossible d’utiliser ImageField car Pillow n’est pas installé.

Modèles

  • models.E001 : <swappable> n’est pas sous la forme étiquette_app.nom_app.
  • models.E002 : <RÉGLAGE> fait référence à <modèle>, qui n’est pas installé ou qui est abstrait.
  • models.E003 : le modèle possède deux relations plusieurs-à-plusieurs via le modèle intermédiaire <étiquette_app>.<modèle>.
  • models.E004 : id ne peut être utilisé comme nom de champ que si le champ définit aussi primary_key=True.
  • models.E005 : le champ <nom_de_champ> du modèle parent <modèle> entre en conflit avec le champ <nom_de_champ> du modèle parent <modèle>.
  • models.E006 : le champ entre en conflit avec le champ <nom_de_champ> du modèle <modèle>.
  • models.E007 : le champ <nom_de_champ> a le nom de colonne <nom_de_colonne> qui est utilisé par un autre champ.
  • models.E008 : index_together doit être une liste ou un tuple.
  • models.E009 : tous les éléments de index_together doivent être des listes ou des tuples.
  • models.E010 : unique_together doit être une liste ou un tuple.
  • models.E011: tous les éléments de unique_together doivent être des listes ou des tuples.
  • models.E012: index_together/unique_together refers to the nonexistent field <field name>.
  • models.E013 : index_together/unique_together fait référence à un <nom_de_champ> de type ManyToManyField, mais ces champs ne sont pas pris en charge pour cette option.
  • models.E014 : ordering doit être un tuple ou une liste (même si vous souhaitez trier sur un seul champ).
  • models.E015: ordering refers to the nonexistent field <field name>.
  • models.E016 : index_together/unique_together se réfèrent au champ <nom_de_champ> qui n’est pas local au modèle <modèle>.
  • models.E017 : le modèle mandataire <modèle> contient des champs de modèle.
  • models.E018 : nom de colonne auto-généré trop long pour le champ <champ>. La longueur maximale est de <longueur_maximum> pour la base de données <alias>.
  • models.E019 : nom de colonne auto-généré trop long pour le champ plusieurs-à-plusieurs <champ>. La longueur maximale est de <longueur_maximum> pour la base de données <alias>.
  • models.E020 : La méthode de classe <modèle>.check() est actuellement surchargée.
  • models.E021 : ordering et order_with_respect_to ne peuvent pas être utilisés simultanément.
  • models.E022 : <fonction> contient une référence différée à <étiquette_app>.<modèle>, mais l’application <étiquette_app> n’est pas installée ou ne fournit pas de modèle <modèle>.
  • models.E023 : le nom de modèle <modèle> ne peut pas commencer ni se terminer par un soulignement car cela entre en conflit avec la syntaxe de requête.
  • models.E024 : le nom de modèle <modèle> ne peut pas contenir de double soulignement car cela entre en conflit avec la syntaxe de requête.

Sécurité

Les contrôles de sécurité ne rendent pas votre site sûr. Ils n’auditent pas votre code, ne font pas de détection d’intrusion ou quoi que ce soit d’autre de particulièrement complexe. Ils s’occupent plutôt d’une liste de contrôles automatisés détectant les problèmes les plus évidents. Ils aident à se rappeler des choses simples qui améliorent la sécurité d’un site.

Certains de ces contrôles ne sont pas forcément adéquats pour votre configuration de déploiement particulière. Par exemple, si vous avez délégué la redirection HTTP vers HTTPS à un répartiteur de charge, il serait gênant d’être constamment averti que le réglage SECURE_SSL_REDIRECT n’est pas actif. Utilisez SILENCED_SYSTEM_CHECKS pour réduire au silence les contrôles non nécessaires.

Les contrôles suivants sont exécutés si l’option :djadminopt:`--deploy` est indiquée :

  • security.W001: You do not have django.middleware.security.SecurityMiddleware in your MIDDLEWARE so the SECURE_HSTS_SECONDS, SECURE_CONTENT_TYPE_NOSNIFF, SECURE_BROWSER_XSS_FILTER, and SECURE_SSL_REDIRECT settings will have no effect.
  • security.W002: You do not have django.middleware.clickjacking.XFrameOptionsMiddleware in your MIDDLEWARE, so your pages will not be served with an 'x-frame-options' header. Unless there is a good reason for your site to be served in a frame, you should consider enabling this header to help prevent clickjacking attacks.
  • security.W003: You don’t appear to be using Django’s built-in cross-site request forgery protection via the middleware (django.middleware.csrf.CsrfViewMiddleware is not in your MIDDLEWARE). Enabling the middleware is the safest approach to ensure you don’t leave any holes.
  • security.W004 : vous n’avez pas défini de valeur pour le réglage SECURE_HSTS_SECONDS. Si tout votre site est entièrement servi par SSL, il est possible d’envisager définir une valeur et d’activer HSTS (HTTP Strict Transport Security). Mais prenez soin de lire premièrement la documentation ; l’activation précipitée de HSTS peut être la cause de problèmes sérieux et irréversibles.
  • security.W005 : vous n’avez pas défini le réglage SECURE_HSTS_INCLUDE_SUBDOMAINS à True. Sans cela, votre site est potentiellement vulnérable à des attaques via une connexion non sécurisée à un sous-domaine. Ne choisissez la valeur True que si vous êtes sûr que tous les sous-domaines de votre domaine sont exclusivement servis par SSL.
  • security.W006 : le réglage SECURE_CONTENT_TYPE_NOSNIFF n’est pas défini à True, ce qui fait que vos pages ne seront pas servies avec un en-tête 'x-content-type-options: nosniff'. Vous devriez envisager d’activer cet en-tête pour empêcher les navigateurs d’identifier de manière incorrecte les types de contenu.
  • security.W007 : le réglage SECURE_BROWSER_XSS_FILTER n’est pas défini à True, ce qui fait que vos pages ne seront pas servies avec un en-tête 'x-xss-protection: 1; mode=block'. Vous devriez envisager d’activer cet en-tête pour activer le filtrage XSS des navigateurs et aider ainsi à prévenir les attaques XSS.
  • security.W008 : le réglage SECURE_SSL_REDIRECT n’est pas défini à True. Sauf si votre site doit être accessible à la fois par des connexions SSL et non SSL, il est conseillé de soit définir ce réglage à True, soit de configurer un répartiteur de charge ou un serveur mandataire inverse pour rediriger toutes les connexions vers HTTPS.
  • security.W009 : la clé secrète SECRET_KEY contient moins de 50 caractères ou possède moins de 5 caractères différents. Veuillez générer une clé secrète longue et aléatoire, faute de quoi de nombreuses fonctionnalités de Django liées à la sécurité seront vulnérables aux attaques.
  • security.W010 : l’application django.contrib.sessions se trouve dans votre réglage INSTALLED_APPS mais vous n’avez pas défini SESSION_COOKIE_SECURE à True. L’utilisation d’un cookie de session sécurisé complique la tâche des renifleurs de trafic réseau quand ils essaient de s’immiscer dans les sessions des utilisateurs.
  • security.W011: You have django.contrib.sessions.middleware.SessionMiddleware in your MIDDLEWARE, but you have not set SESSION_COOKIE_SECURE to True. Using a secure-only session cookie makes it more difficult for network traffic sniffers to hijack user sessions.
  • security.W012 : SESSION_COOKIE_SECURE n’est pas défini à True. L’utilisation d’un cookie de session sécurisé complique la tâche des renifleurs de trafic réseau quand ils essaient de s’immiscer dans les sessions des utilisateurs.
  • security.W013 : l’application django.contrib.sessions se trouve dans votre réglage INSTALLED_APPS mais vous n’avez pas défini SESSION_COOKIE_HTTPONLY à True. L’utilisation d’un cookie de session HttpOnly complique la tâche des attaques par script inter-site quand elles essaient de s’immiscer dans les sessions des utilisateurs.
  • security.W014: You have django.contrib.sessions.middleware.SessionMiddleware in your MIDDLEWARE, but you have not set SESSION_COOKIE_HTTPONLY to True. Using an HttpOnly session cookie makes it more difficult for cross-site scripting attacks to hijack user sessions.
  • security.W015 : SESSION_COOKIE_HTTPONLY n’est pas défini à True. L’utilisation d’un cookie de session HttpOnly complique la tâche des attaques par script inter-site quand elles essaient de s’immiscer dans les sessions des utilisateurs.
  • security.W016 : CSRF_COOKIE_SECURE n’est pas défini à True. L’utilisation d’un cookie CSRF sécurisé complique la tâche des renifleurs de trafic réseau quand ils essaient de voler le jeton CSRF.
  • security.W017 : CSRF_COOKIE_HTTPONLY n’est pas défini à True. L’utilisation d’un cookie CSRF HttpOnly complique la tâche des attaques par script inter-site quand elles essaient de voler le jeton CSRF. *Ce contrôle est supprimé dans Django 1.11 car le réglage *CSRF_COOKIE_HTTPONLY *n’offre aucun bénéfice concret.
  • security.W018 : le réglage DEBUG ne devrait pas être défini à True pour une application Django déployée.
  • security.W019: You have django.middleware.clickjacking.XFrameOptionsMiddleware in your MIDDLEWARE, but X_FRAME_OPTIONS is not set to 'DENY'. The default is 'SAMEORIGIN', but unless there is a good reason for your site to serve other parts of itself in a frame, you should change it to 'DENY'.
  • security.W020 : le réglage ALLOWED_HOSTS ne peut pas être vide en déploiement.
  • security.W021 : vous n’avez pas défini le réglage SECURE_HSTS_PRELOAD à True. Sans cela, votre site ne peut pas être proposé à la liste de préchargement des navigateurs.

Signaux

  • signals.E001 : <gestionnaire> est connecté au signal <signal> avec une référence différée vers l’expéditeur <étiquette app>.<modèle>, mais <étiquette app> n’est pas installé ou ne fournit pas le modèle <modèle>.

Gabarits

Les contrôles suivants vérifient que le réglage TEMPLATES est configuré correctement :

  • templates.E001 : 'APP_DIRS': True figure dans votre réglage TEMPLATES mais 'loaders' est aussi dans OPTIONS. Supprimez APP_DIRS ou l’option 'loaders'.
  • templates.E002 : string_if_invalid dans TEMPLATES OPTIONS doit être une chaîne, mais c’est actuellement : {valeur} ({type}).

URL

Les contrôles suivants sont effectués sur votre configuration d’URL :

  • urls.W001: Your URL pattern <pattern> uses include() with a route ending with a $. Remove the dollar from the route to avoid problems including URLs.
  • urls.W002: Your URL pattern <pattern> has a route beginning with a /. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing /.
  • urls.W003 : le motif d’URL <pattern> possède un nom name contenant un :. Enlevez ces deux-points pour éviter des références d’espaces de noms ambigus.
  • urls.E004: Your URL pattern <pattern> is invalid. Ensure that urlpatterns is a list of path() and/or re_path() instances.
  • urls.W005 : l’espace de noms d’URL <espace de nom> n’est pas unique. Il est possible que certains URL de cet espace de noms ne puissent pas être résolus.
  • urls.E006 : les réglages MEDIA_URL/ STATIC_URL doivent se terminer par une barre oblique.

Contrôles des applications contrib

admin

Les contrôles de l’interface d’administration sont tous effectués sous l’étiquette admin.

Les contrôles suivants sont effectués sur toute classe (ou sous-classe de) ModelAdmin qui est inscrite auprès du site d’administration :

  • admin.E001 : la valeur de raw_id_fields doit être une liste ou un tuple.
  • admin.E002 : la valeur de raw_id_fields[n] fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E003 : la valeur de raw_id_fields[n] doit être une clé étrangère ou un champ plusieurs-à-plusieurs.
  • admin.E004 : la valeur de fields doit être une liste ou un tuple.
  • admin.E005 : fieldsets et fields sont tous deux spécifiés.
  • admin.E006 : la valeur de fields contient des champs en double.
  • admin.E007 : la valeur de fieldsets doit être une liste ou un tuple.
  • admin.E008 : la valeur de fieldsets[n] doit être une liste ou un tuple.
  • admin.E009 : la valeur de fieldsets[n] doit être de longueur 2.
  • admin.E010 : la valeur de fieldsets[n][1] doit être un dictionnaire.
  • admin.E011 : la valeur de fieldsets[n][1] doit contenir la clé fields.
  • admin.E012 : il y a des champs en double dans fieldsets[n][1].
  • admin.E013 : fields[n]/fieldsets[n][m] ne peut pas inclure le champ ManyToManyField <nom_de_champ>, car ce champ définit manuellement un modèle de relation.
  • admin.E014 : la valeur de exclude doit être une liste ou un tuple.
  • admin.E015 : la valeur de exclude contient des champs en double.
  • admin.E016 : la valeur de form doit hériter de BaseModelForm.
  • admin.E017 : la valeur de filter_vertical doit être une liste ou un tuple.
  • admin.E018 : la valeur de filter_horizontal doit être une liste ou un tuple.
  • admin.E019 : la valeur de filter_vertical[n]/filter_vertical[n] fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E020 : la valeur de filter_vertical[n]/filter_vertical[n] doit être un champ plusieurs-à-plusieurs.
  • admin.E021 : la valeur de radio_fields doit être un dictionnaire.
  • admin.E022 : la valeur de radio_fields fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E023 : la valeur de radio_fields fait référence à <nom_de_champ>, qui n’est pas une clé ForeignKey et n’a pas de définition choices.
  • admin.E024 : la valeur de radio_fields[<nom_de_champ>] doit être soit admin.HORIZONTAL soit admin.VERTICAL.
  • admin.E025 : la valeur de view_on_site doit être soit un objet exécutable, soit une valeur booléenne.
  • admin.E026 : la valeur de prepopulated_fields doit être un dictionnaire.
  • admin.E027 : la valeur de prepopulated_fields fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E028 : la valeur de prepopulated_fields fait référence à <nom_de_champ>, qui ne doit pas être un champ DateTimeField, ForeignKey, OneToOneField ni ManyToManyField.
  • admin.E029 : la valeur de prepopulated_fields[<nom_de_champ>] doit être une liste ou un tuple.
  • admin.E030 : la valeur de prepopulated_fields fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E031 : la valeur de ordering doit être une liste ou un tuple.
  • admin.E032 : la valeur de ordering a le marqueur d’ordre aléatoire ?, mais contient aussi d’autres champs.
  • admin.E033 : la valeur de ordering fait référence à <nom_de_champ>, qui n’est pas un attribut de <modèle>.
  • admin.E034 : la valeur de readonly_fields doit être une liste ou un tuple.
  • admin.E035: La valeur de readonly_fields[n] n’est pas appelable, un attribut de <ModelAdmin class>, ou un attribut de <model>.
  • admin.E036: The value of autocomplete_fields must be a list or tuple.
  • admin.E037: The value of autocomplete_fields[n] refers to <field name>, which is not an attribute of <model>.
  • admin.E038: The value of autocomplete_fields[n] must be a foreign key or a many-to-many field.
  • admin.E039: An admin for model <model> has to be registered to be referenced by <modeladmin>.autocomplete_fields.
  • admin.E040: <modeladmin> must define search_fields, because it’s referenced by <other_modeladmin>.autocomplete_fields.

ModelAdmin

Les contrôles suivants sont effectués sur toute classes (ou sous-classe de) ModelAdmin qui est enregistrée auprès du site d’administration:

  • admin.E101: La valeur de save_as doit être un booléen.
  • admin.E102: La valeur de save_on_top doit être un booléen.
  • admin.E103: La valeur de inlines doit être une liste ou un tuple.
  • admin.E104 : <InlineModelAdmin class> doit hériter de InlineModelAdmin.
  • admin.E105: <InlineModelAdmin class> doit avoir un attribut model.
  • admin.E106: La valeur de <InlineModelAdmin class>.model doit être un Model.
  • admin.E107: La valeur de list_display doit être une liste ou un tuple.
  • admin.E108 : la valeur de list_display[n] fait référence à <label>, qui n’est pas un objet exécutable, un attribut de <classe ModelAdmin>, ni un attribut ou une méthode de <modèle>.
  • admin.E109 : la valeur de list_display[n] ne peut pas être un champ ManyToManyField.
  • admin.E110 : La valeur de list_display_links doit être une liste, un tuple ou None.
  • admin.E111 : la valeur de list_display_links[n] fait référence à <label>, qui n’est pas défini dans list_display.
  • admin.E112 : La valeur de list_filter doit être une liste ou un tuple.
  • admin.E113 : la valeur de list_filter[n] doit hériter de ListFilter.
  • admin.E114 : la valeur de list_filter[n] ne doit pas hériter de FieldListFilter.
  • admin.E115 : la valeur de list_filter[n][1] doit hériter de FieldListFilter.
  • admin.E116 : la valeur de list_filter[n] fait référence à <label>, qui ne fait pas référence à un champ Field.
  • admin.E117 : la valeur de list_select_related doit être une valeur booléenne, un tuple ou une liste.
  • admin.E118 : la valeur de list_per_page doit être un nombre entier.
  • admin.E119 : la valeur de list_max_show_all doit être un nombre entier.
  • admin.E120 : la valeur de list_editable doit être une liste ou un tuple.
  • admin.E121 : la valeur de list_editable[n] fait référence à <label>, qui n’est pas un attribut de <modèle>.
  • admin.E122 : la valeur de list_editable[n] fait référence à <label>, qui ne figure pas dans list_display.
  • admin.E123 : la valeur de list_editable[n] ne peut pas être à la fois dans list_editable et dans list_display_links.
  • admin.E124 : la valeur de list_editable[n] fait référence au tout premier champ dans list_display (<label>), qui ne peut pas utilisé tant que list_display_links n’est pas défini.
  • admin.E125 : la valeur de list_editable[n] fait référence à <nom_de_champ>, qui n’est pas modifiable dans l’interface d’administration.
  • admin.E126 : La valeur de search_fields doit être une liste ou un tuple.
  • admin.E127 : la valeur de date_hierarchy fait référence à <nom_de_champ>, qui ne se réfère pas à un champ.
  • admin.E128 : la valeur de date_hierarchy doit être un champ DateField ou DateTimeField.

InlineModelAdmin

Les contrôles suivants sont effectués sur chaque InlineModelAdmin qui est inscrit comme élément intégré dans une classe ModelAdmin.

  • admin.E201 : vous ne pouvez pas exclure le champ <nom_de_champ>, car il s’agit de la clé étrangère vers le modèle parent <étiquette_application>.<modèle>.
  • admin.E202 : <modèle> n’a pas de clé ForeignKey vers <modèle parent>./ <modèle> `` a plus d'une clé ``ForeignKey vers <modèle parent>.
  • admin.E203 : la valeur de extra doit être un nombre entier.
  • admin.E204 : la valeur de max_num doit être un nombre entier.
  • admin.E205 : la valeur de min_num doit être un nombre entier.
  • admin.E206 : la valeur de formset doit hériter de BaseModelFormSet.

GenericInlineModelAdmin

Les contrôles suivants sont effectués sur chaque GenericInlineModelAdmin qui est inscrit comme élément intégré dans une classe ModelAdmin.

  • admin.E301 : 'champ_ct' fait référence à <label>, qui n’est pas un champ de <modèle>.
  • admin.E302 : 'champ_ct_fk' fait référence à <label>, qui n’est pas un champ de <modèle>.
  • admin.E303 : <modèle> n’a pas de clé GenericForeignKey.
  • admin.E304 : <modèle> n’a pas de clé GenericForeignKey utilisant le champ de type de contenu <nom_de_champ> et le champ d’identifiant d’objet <nom_de_champ>.

AdminSite

Les contrôles suivants sont effectués sur l’objet AdminSite par défaut :

auth

  • auth.E001 : REQUIRED_FIELDS doit être une liste ou un tuple.
  • auth.E002 : le champ désigné en tant que USERNAME_FIELD pour un modèle utilisateur personnalisé ne doit pas être inclus dans REQUIRED_FIELDS.
  • auth.E003 : <champ> doit être unique car il est désigné comme USERNAME_FIELD.
  • auth.W004 : <champ> est désigné comme USERNAME_FIELD, mais il n’est pas unique.
  • auth.E005 : le nom de code de permission <nom_code> entre en conflit avec une permission intégrée du modèle <modèle>.
  • auth.E006 : le nom de code de permission <nom_code> est à double pour le modèle <modèle>.
  • auth.E007 : l’attribut verbose_name du modèle <modèle> ne doit pas dépasser 244 caractères pour que ses noms de permissions automatiques ne dépassent pas 255 caractères.
  • auth.E008 : la permission nommée <nom> du modèle <modèle> est plus longue que 255 caractères.
  • auth.C009 : <modèle utilisateur>.is_anonymous doit être un attribut ou une propriété plutôt qu’une méthode. Il s’agit d’un problème de sécurité car avec une méthode, les utilisateurs anonymes seront considérés comme authentifiés !
  • auth.C010 : <modèle utilisateur>.is_authenticated doit être un attribut ou une propriété plutôt qu’une méthode. Il s’agit d’un problème de sécurité car avec une méthode, les utilisateurs anonymes seront considérés comme authentifiés !

contenttypes

Les contrôles suivants sont effectués quand un modèle contient une clé GenericForeignKey ou une relation GenericRelation:

  • contenttypes.E001: The GenericForeignKey object ID references the nonexistent field <field>.
  • contenttypes.E002: The GenericForeignKey content type references the nonexistent field <field>.
  • contenttypes.E003 : <champ> n’est pas une clé ForeignKey.
  • contenttypes.E004 : <field> n’est pas une ForeignKey vers contenttypes.ContentType.
  • contenttypes.E005: Model names must be at most 100 characters.

sites

Les contrôles suivants sont effectués sur chaque modèle utilisant un gestionnaire CurrentSiteManager:

  • sites.E001 : CurrentSiteManager n’a pas réussi à trouver un champ nommé <nom_de_champ>.
  • sites.E002 : CurrentSiteManager ne peut pas utiliser <champ> car ce n’est pas une clé étrangère ni un champ plusieurs-à-plusieurs.

staticfiles

Les contrôles suivants vérifient que django.contrib.staticfiles est configuré correctement :

Back to Top