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¶
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
Nonepeut ê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__(avec Python 2, vous devez définir la méthode__unicode__). 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ùXest l’une des lettresCEWID, indiquant la gravité du message (Cpour critique,Epour 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.
É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 commandemigrateou si vous indiquez l’étiquettedatabaselors de l’appel à la commandecheck.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.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 suivants sont effectués pour prévenir l’utilisateur de tout problème potentiel qui pourrait survenir à la suite d’une mise à niveau de version.
- 1_6.W001 : Certains tests unitaires de projet peuvent ne pas s’exécuter comme prévu. Ce contrôle a été supprimé de Django 1.8 en raison de faux positifs.
- 1_6.W002 :
BooleanFieldn’a pas de valeur par défaut. Ce contrôle a été supprimé de Django 1.8 en raison de faux positifs. - 1_7.W001 : Django 1.7 a modifié la valeur par défaut globale de
MIDDLEWARE_CLASSES.django.contrib.sessions.middleware.SessionMiddleware,django.contrib.auth.middleware.AuthenticationMiddlewareetdjango.contrib.messages.middleware.MessageMiddlewareont été enlevés de la valeur par défaut. Si votre projet a besoin de ces intergiciels, il faudra alors que vous configuriez ce réglage. Ce contrôle a été supprimé dans Django 1.9. - 1_8.W001 : les réglages indépendants
TEMPLATE_*ont été rendus obsolètes dans Django 1.8 et le dictionnaireTEMPLATESa maintenant la priorité. Vous devez placer les valeurs des réglages suivants dans votre dictionnaireTEMPLATESpar défaut :TEMPLATE_DIRS,TEMPLATE_CONTEXT_PROCESSORS,TEMPLATE_DEBUG,TEMPLATE_LOADERS,TEMPLATE_STRING_IF_INVALID. - 1_10.W001 : le réglage
MIDDLEWARE_CLASSESest obsolète dans Django 1.10 et le réglageMIDDLEWAREprend la priorité. Comme vous avez définiMIDDLEWARE, la valeur deMIDDLEWARE_CLASSESest ignorée.
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églageCACHES.
Base de données¶
MySQL¶
Si vous utilisez MySQL, les contrôles suivants seront effectués :
- mysql.E001 : MySQL ne permet pas aux champs
CharFielduniques d’avoir un attributmax_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* :
pkest un mot réservé et ne peut pas être utilisé comme nom de champ. - fields.E004 :
choicesdoit être un élément itérable (par ex. une liste ou un tuple). - fields.E005 :
choicesdoit être un élément itérable renvoyant des tuples(valeur réelle, nom convivial). - fields.E006 :
db_indexne peut contenir queNone,TrueouFalse. - fields.E007 : les clés primaires ne peuvent pas contenir
null=True. - fields.E100 : les champs
AutoFielddoivent déclarerprimary_key=True. - fields.E110 : les champs
BooleanFieldn’acceptent pas les valeurs nulles. - fields.E120 : les champs
CharFielddoivent définir un attributmax_length. - fields.E121 :
max_lengthdoit être un entier positif. - fields.W122 :
max_lengthest ignoré lorsqu’il est utilisé pour un champIntegerField. - fields.E130 : les champs
DecimalFielddoivent définir un attributdecimal_places. - fields.E131 :
decimal_placesdoit être un entier non négatif. - fields.E132 : les champs
DecimalFielddoivent définir un attributmax_digits. - fields.E133 :
max_digitsdoit être un entier non négatif. - fields.E134 :
max_digitsdoit être supérieur ou égal àdecimal_places. - fields.E140 : les champs
FilePathFielddoivent comporter l’un des deux attributsallow_filesetallow_foldersdéfini àTrue. - fields.E150 : les champs
GenericIPAddressFieldne 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_addetdefaultsont mutuellement exclusives. Une seule de ces options doit être conservée. - fields.W161 : une valeur par défaut fixe est indiquée.
- fields.E900 :
IPAddressFielda été supprimé, sauf pour la prise en charge de migrations historiques. - fields.W900 :
IPAddressFieldest 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 :
CommaSeparatedIntegerFieldest obsolète. Sa prise en charge (à l’exception des migrations historiques) sera supprimée dans Django 2.0.
Champs de type fichier¶
- fields.E200 :
uniquen’est pas un paramètre valable pour un champFileField. Ce contrôle est supprimé dans Django 1.11. - fields.E201 :
primary_keyn’est pas un paramètre valable pour un champFileField. - fields.E202 : le paramètre
upload_todeFileFielddoit être un chemin relatif, et non absolu. - fields.E210 : impossible d’utiliser
ImageFieldcar 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 :
idne peut être utilisé comme nom de champ que si le champ définit aussiprimary_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_togetherdoit être une liste ou un tuple. - models.E009 : tous les éléments de
index_togetherdoivent être des listes ou des tuples. - models.E010 :
unique_togetherdoit être une liste ou un tuple. - models.E011: tous les éléments de
unique_togetherdoivent être des listes ou des tuples. - models.E012 :
index_together/unique_togetherfait référence au champ inexistant<nom_de_champ>. - models.E013 :
index_together/unique_togetherfait référence à un<nom_de_champ>de typeManyToManyField, mais ces champs ne sont pas pris en charge pour cette option. - models.E014 :
orderingdoit être un tuple ou une liste (même si vous souhaitez trier sur un seul champ). - models.E015 :
orderingfait référence au champ inexistant<nom_de_champ>. - models.E016 :
index_together/unique_togetherse 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 :
orderingetorder_with_respect_tone 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 : l’intergiciel
django.middleware.security.SecurityMiddlewarene figure pas dansMIDDLEWARE/MIDDLEWARE_CLASSESce qui rendra ineffectif les réglagesSECURE_HSTS_SECONDS,SECURE_CONTENT_TYPE_NOSNIFF,SECURE_BROWSER_XSS_FILTERetSECURE_SSL_REDIRECT. - security.W002 : l’intergiciel
django.middleware.clickjacking.XFrameOptionsMiddlewarene figure pas dansMIDDLEWARE/MIDDLEWARE_CLASSES, ce qui fait que vos pages ne seront pas servies avec un en-tête'x-frame-options'. Sauf dans les cas où il existe une bonne raison pour que votre site apparaisse dans un cadre, il est recommandé d’activer cet en-tête pour contribuer à prévenir les attaques par détournement de clic. - security.W003 : il semble que vous n’utilisiez pas la protection intégrée de Django contre la falsification de requêtes inter-sites avec l’intergiciel dédié (
django.middleware.csrf.CsrfViewMiddlewarene figure pas dansMIDDLEWARE/MIDDLEWARE_CLASSES). L’activation de l’intergiciel est l’approche la plus sûre pour s’assurer qu’aucun trou ne subsiste dans cette protection. - 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 valeurTrueque 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_NOSNIFFn’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_FILTERn’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_REDIRECTn’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_KEYcontient 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.sessionsse trouve dans votre réglageINSTALLED_APPSmais vous n’avez pas définiSESSION_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 :
django.contrib.sessions.middleware.SessionMiddlewarefigure dansMIDDLEWARE/MIDDLEWARE_CLASSES, mais vous n’avez pas définiSESSION_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.W012 :
SESSION_COOKIE_SECUREn’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.sessionsse trouve dans votre réglageINSTALLED_APPSmais vous n’avez pas définiSESSION_COOKIE_HTTPONLYàTrue. L’utilisation d’un cookie de sessionHttpOnlycomplique la tâche des attaques par script inter-site quand elles essaient de s’immiscer dans les sessions des utilisateurs. - security.W014 :
django.contrib.sessions.middleware.SessionMiddlewarefigure dansMIDDLEWARE/MIDDLEWARE_CLASSES, mais vous n’avez pas définiSESSION_COOKIE_HTTPONLYàTrue. L’utilisation d’un cookie de sessionHttpOnlycomplique la tâche des attaques par script inter-site quand elles essaient de s’immiscer dans les sessions des utilisateurs. - security.W015 :
SESSION_COOKIE_HTTPONLYn’est pas défini àTrue. L’utilisation d’un cookie de sessionHttpOnlycomplique la tâche des attaques par script inter-site quand elles essaient de s’immiscer dans les sessions des utilisateurs. - security.W016 :
CSRF_COOKIE_SECUREn’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_HTTPONLYn’est pas défini àTrue. L’utilisation d’un cookie CSRFHttpOnlycomplique 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
DEBUGne devrait pas être défini àTruepour une application Django déployée. - security.W019 :
django.middleware.clickjacking.XFrameOptionsMiddlewarefigure dansMIDDLEWARE/MIDDLEWARE_CLASSES, maisX_FRAME_OPTIONSn’est pas défini à'DENY'. La valeur par défaut est'SAMEORIGIN', mais sauf dans les cas où un site a une bonne raison de servir certaines de ses parties dans un cadre, vous devriez modifier ce réglage à'DENY'. - security.W020 : le réglage
ALLOWED_HOSTSne 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>.
URL¶
Les contrôles suivants sont effectués sur votre configuration d’URL :
- urls.W001 : le motif d’URL
<pattern>utiliseinclude()avec une expressionregexse terminant par$. Enlevez le dollar de l’expressionregexpour éviter des problèmes lors de l’inclusion d’URL. - urls.W002 : le motif d’URL
<pattern>possède une expressionregexcommençant par/. Enlevez cette barre oblique car elle n’est pas nécessaire. Si ce motif est référencé par uninclude(), vérifiez que le motifinclude()se termine par/. - urls.W003 : le motif d’URL
<pattern>possède un nomnamecontenant un:. Enlevez ces deux-points pour éviter des références d’espaces de noms ambigus. - urls.E004 : le motif d’URL
<motif>n’est pas valide. Vérifiez queurlpatternsest bien une liste d’instancesurl(). - 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_URLdoivent 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_fieldsdoit ê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
fieldsdoit être une liste ou un tuple. - admin.E005 :
fieldsetsetfieldssont tous deux spécifiés. - admin.E006 : la valeur de
fieldscontient des champs en double. - admin.E007 : la valeur de
fieldsetsdoit ê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 champManyToManyField<nom_de_champ>, car ce champ définit manuellement un modèle de relation. - admin.E014 : la valeur de
excludedoit être une liste ou un tuple. - admin.E015 : la valeur de
excludecontient des champs en double. - admin.E016 : la valeur de
formdoit hériter deBaseModelForm. - admin.E017 : la valeur de
filter_verticaldoit être une liste ou un tuple. - admin.E018 : la valeur de
filter_horizontaldoit ê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_fieldsdoit être un dictionnaire. - admin.E022 : la valeur de
radio_fieldsfait référence à<nom_de_champ>, qui n’est pas un attribut de<modèle>. - admin.E023 : la valeur de
radio_fieldsfait référence à<nom_de_champ>, qui n’est pas une cléForeignKeyet n’a pas de définitionchoices. - admin.E024 : la valeur de
radio_fields[<nom_de_champ>]doit être soitadmin.HORIZONTALsoitadmin.VERTICAL. - admin.E025 : la valeur de
view_on_sitedoit être soit un objet exécutable, soit une valeur booléenne. - admin.E026 : la valeur de
prepopulated_fieldsdoit être un dictionnaire. - admin.E027 : la valeur de
prepopulated_fieldsfait référence à<nom_de_champ>, qui n’est pas un attribut de<modèle>. - admin.E028 : la valeur de
prepopulated_fieldsfait référence à<nom_de_champ>, qui ne doit pas être un champDateTimeField,ForeignKey,OneToOneFieldniManyToManyField. - admin.E029 : la valeur de
prepopulated_fields[<nom_de_champ>]doit être une liste ou un tuple. - admin.E030 : la valeur de
prepopulated_fieldsfait référence à<nom_de_champ>, qui n’est pas un attribut de<modèle>. - admin.E031 : la valeur de
orderingdoit être une liste ou un tuple. - admin.E032 : la valeur de
orderinga le marqueur d’ordre aléatoire?, mais contient aussi d’autres champs. - admin.E033 : la valeur de
orderingfait référence à<nom_de_champ>, qui n’est pas un attribut de<modèle>. - admin.E034 : la valeur de
readonly_fieldsdoit ê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>.
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_asdoit être un booléen. - admin.E102: La valeur de
save_on_topdoit être un booléen. - admin.E103: La valeur de
inlinesdoit être une liste ou un tuple. - admin.E104 :
<InlineModelAdmin class>doit hériter deInlineModelAdmin. - admin.E105:
<InlineModelAdmin class>doit avoir un attributmodel. - admin.E106: La valeur de
<InlineModelAdmin class>.modeldoit être unModel. - admin.E107: La valeur de
list_displaydoit ê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 champManyToManyField. - admin.E110 : La valeur de
list_display_linksdoit être une liste, un tuple ouNone. - admin.E111 : la valeur de
list_display_links[n]fait référence à<label>, qui n’est pas défini danslist_display. - admin.E112 : La valeur de
list_filterdoit être une liste ou un tuple. - admin.E113 : la valeur de
list_filter[n]doit hériter deListFilter. - admin.E114 : la valeur de
list_filter[n]ne doit pas hériter deFieldListFilter. - admin.E115 : la valeur de
list_filter[n][1]doit hériter deFieldListFilter. - admin.E116 : la valeur de
list_filter[n]fait référence à<label>, qui ne fait pas référence à un champField. - admin.E117 : la valeur de
list_select_relateddoit être une valeur booléenne, un tuple ou une liste. - admin.E118 : la valeur de
list_per_pagedoit être un nombre entier. - admin.E119 : la valeur de
list_max_show_alldoit être un nombre entier. - admin.E120 : la valeur de
list_editabledoit ê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 danslist_display. - admin.E123 : la valeur de
list_editable[n]ne peut pas être à la fois danslist_editableet danslist_display_links. - admin.E124 : la valeur de
list_editable[n]fait référence au tout premier champ danslist_display(<label>), qui ne peut pas utilisé tant quelist_display_linksn’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_fieldsdoit être une liste ou un tuple. - admin.E127 : la valeur de
date_hierarchyfait référence à<nom_de_champ>, qui ne se réfère pas à un champ. - admin.E128 : la valeur de
date_hierarchydoit être un champDateFieldouDateTimeField.
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éForeignKeyvers<modèle parent>./<modèle> `` a plus d'une clé ``ForeignKeyvers<modèle parent>. - admin.E203 : la valeur de
extradoit être un nombre entier. - admin.E204 : la valeur de
max_numdoit être un nombre entier. - admin.E205 : la valeur de
min_numdoit être un nombre entier. - admin.E206 : la valeur de
formsetdoit hériter deBaseModelFormSet.
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éGenericForeignKeyutilisant 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 :
- admin.E401 :
django.contrib.contenttypesdoit être dansINSTALLED_APPSpour pouvoir utiliser l’application d’administration. - admin.E402 :
django.contrib.auth.context_processors.authdoit être dansTEMPLATESpour pouvoir utiliser l’application d’administration.
auth¶
- auth.E001 :
REQUIRED_FIELDSdoit être une liste ou un tuple. - auth.E002 : le champ désigné en tant que
USERNAME_FIELDpour un modèle utilisateur personnalisé ne doit pas être inclus dansREQUIRED_FIELDS. - auth.E003 :
<champ>doit être unique car il est désigné commeUSERNAME_FIELD. - auth.W004 :
<champ>est désigné commeUSERNAME_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_namedu 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_anonymousdoit ê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_authenticateddoit ê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 : l’ID d’objet
GenericForeignKeyfait référence au champ<field>qui n’existe pas. - contenttypes.E002 : le type de contenu
GenericForeignKeyfait référence au champ<field>inexistant. - contenttypes.E003 :
<champ>n’est pas une cléForeignKey. - contenttypes.E004 :
<field>n’est pas uneForeignKeyverscontenttypes.ContentType.
sites¶
Les contrôles suivants sont effectués sur chaque modèle utilisant un gestionnaire CurrentSiteManager:
- sites.E001 :
CurrentSiteManagern’a pas réussi à trouver un champ nommé<nom_de_champ>. - sites.E002 :
CurrentSiteManagerne peut pas utiliser<champ>car ce n’est pas une clé étrangère ni un champ plusieurs-à-plusieurs.