django-modelqueryform is a flexible app that helps you build Q object generating forms.

It is a great tool if you want you users to be able to do filtered searches against your models.


The project can be found at


The full documentation is at


  • Django 1.11+
  • Python 3.4+


  • Useable default FormFields for ModelFields that:

    • Have .choices defined or are inherently made of choices (ie. BooleanField and NullBooleanField)
    • Are represented as numeric types (eg. IntegerField, FloatField, etc.)
    • Text backed fields need code written to handle them. That is easy though, because:
  • Creation of FormFields, Q objects, and User readable query terms are completely customizable. You can target ModelFields:

    • By name (If the field has specific requirements)
    • By field type (Use the same widget or Q object builder for all CharFields)
  • Can follow Model relationships or treat relationship fields as .choices

  • Provides a new Field and Widget (RangeField, RangeWidget). These allow users to generate a __gte, __lte pair for the orm, optionally also including an __isnull

    • RangeField

      • Dynamically generates min and max boundaries. (Aggregate Min and Max on the model field)
      • If null=True on the ModelField allows user to indicate if they want to include null values in the query
    • RangeWidget

      • Returns a MultiWidget with 2 NumberInput widgets (with min and max attributes)