Statically analysing Django applications with Django Lint

  • 8 March, 2009

Django Lint is a static analysis tool that checks (or lints) web applications that are built around the Django web development framework. It aims to encourage the development of high-quality reusable Django applications.

It currently reports on:

  • Nullable CharField or TextField model fields
  • Missing recommended configuration variables in settings.py
  • Mismatch of null=True and blank=False for model fields
  • Use of BooleanField with default=True or use of NullBooleanField
  • Where myapp.models is actually a directory-based package instead of a single models.py
  • Excessive number of models in a single application
  • Models within an application having a common prefix
  • Use of unique_for_date, unique_for_month or unique_for_year modifiers
  • Naive tree structure implementations using ForeignKey('self')
  • Missing __unicode__ methods or use of __str__
  • Incorrect ordering of standard model methods relative to Django style guidelines
  • Misordered middleware in settings.py
  • Models with too many fields (or zero) fields
  • Extremely large CharField fields
  • Use of the PositiveSmallIntegerField or SmallIntegerField fields
  • Use of auto_now or auto_now_add modifiers on date fields
  • Instances of URLField without an explicit verify_exists value
  • (and more)

Admittedly, some of the checks are based on the implementation details of MySQL, PostgreSQL and SQLite backends, but this fits with the goal of promoting re-usable applications anyway.

GPLv3 source, tarballs, etc. Patches welcome.