Skip to content

Checks — overview

django-test-doctor ships fifteen checks in 0.10. Each one is a pluggable class discovered via the django_doctor.checks entry point group, so third-party packages can contribute more.

ID Severity on failure Needs DB write Class of bug caught
system WARNING → CRITICAL no Whatever ./manage.py check already finds
security WARNING → CRITICAL no Deployment settings, weak SECRET_KEY, DEBUG
models INFO → ERROR no Missing __str__, SET_NULL on NOT NULL FK
fk_redundant WARNING no Column duplicating a value reachable via a FK
migrations WARNING / ERROR no Unapplied migrations, schema drift
admin ERROR no Typos in list_display / list_filter / ordering
forms ERROR (INFO when arg-req) no Form.__init__ crashes on blank / empty POST
forms_meta ERROR no Orphan cleaned_data[x] = … on NOT NULL column
drf ERROR (+ INFO) no Serializer Meta.fields ↔ model mismatch
templates WARNING / ERROR no Broken {% url %} / {% static %}, template syntax
views WARNING no First-party view with no auth guard
autogen ERROR no int(x.split(sep)[-1]) auto-gen without try/except
update_fields ERROR no save(update_fields=…) dropping recomputed fields
urls CRITICAL on 5xx yes (users) GET on any URL returns 5xx
post_smoke CRITICAL on 5xx yes (savepoint) POST to CreateView / UpdateView returns 5xx

Ordering

Checks declare a numeric order and run from lowest to highest. The default order groups cheap static checks first, then instance-free introspection, then the DB-touching smoke checks. See each check's page for its specific order number.

Severity ladder

INFO < WARNING < ERROR < CRITICAL

--ci exits non-zero on findings ≥ fail_on (default ["critical", "error"]).

Groups in these docs