Skip to main content

A Django admin widget for building complex queries using jQuery QueryBuilder

Project description

Django Query Builder Widget

A Django admin widget that integrates jQuery QueryBuilder for building complex database queries through an intuitive visual interface.

Preview

image

Features

  • Visual query building interface in Django admin
  • Automatic field detection from Django models
  • Support for all major Django field types
  • Customizable operators per field type
  • Support for custom fields and operators
  • JSON-based query storage
  • Works seamlessly with Django admin

Installation

Install via pip:

pip install django-query-builder-widget

Quick Start

1. Add to your Django project

Add the app to your INSTALLED_APPS in settings.py:

INSTALLED_APPS = [
    # ...
    'django_query_builder_widget',
    # ...
]

2. Collect static files

python manage.py collectstatic

3. Use in your admin

from django.contrib import admin
from django_query_builder_widget import QueryBuilderWidget
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.JSONField: {'widget': QueryBuilderWidget(model=YourModel)},
    }

admin.site.register(YourModel, YourModelAdmin)

Usage Examples

Basic Usage with Model

from django_query_builder_widget import QueryBuilderWidget

# Auto-generate filters from model fields
widget = QueryBuilderWidget(model=MyModel)

Specify Specific Fields

# Only include specific fields
widget = QueryBuilderWidget(
    model=MyModel,
    fields=['name', 'email', 'age', 'created_at']
)

Custom Field Configuration

widget = QueryBuilderWidget(
    model=MyModel,
    field_config={
        'status': {
            'widget': 'select',
            'choices': [
                ('active', 'Active'),
                ('inactive', 'Inactive'),
                ('pending', 'Pending')
            ]
        },
        'priority': {
            'operators': ['equal', 'not_equal', 'greater', 'less']
        }
    }
)

Add Custom Filters

widget = QueryBuilderWidget(
    model=MyModel,
    extra_filters=[
        {
            'id': 'custom_field',
            'label': 'Custom Field',
            'type': 'string',
            'operators': ['equal', 'contains'],
            'input': 'text'
        }
    ]
)

Field Type Mapping

The widget automatically maps Django field types to QueryBuilder types:

Django Field QueryBuilder Type Default Operators
CharField, TextField, EmailField, URLField string equal, not_equal, contains, not_contains, begins_with, ends_with, is_null, is_not_null
IntegerField, BigIntegerField, PositiveIntegerField integer equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, is_null, is_not_null
FloatField, DecimalField double equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, is_null, is_not_null
BooleanField boolean equal
DateField date equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, is_null, is_not_null
DateTimeField datetime equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, is_null, is_not_null
TimeField time equal, not_equal, less, less_or_equal, greater, greater_or_equal, between
ForeignKey, OneToOneField integer equal, not_equal, less, less_or_equal, greater, greater_or_equal, between, is_null, is_not_null

Configuration Options

Widget Parameters

  • model: Django model class to generate filters from
  • fields: List of field names to include (default: all fields)
  • field_config: Dictionary of custom configurations per field
  • extra_filters: List of additional custom filters
  • attrs: Standard Django widget attributes

Field Configuration Options

Each field can be customized with:

  • widget: Input type ('text', 'textarea', 'select', 'radio', 'checkbox', 'number')
  • choices or values: List of tuples or dictionary for select options
  • operators: List of allowed operators for the field

Output Format

The widget stores queries as JSON in the following format:

{
  "condition": "AND",
  "rules": [
    {
      "id": "name",
      "field": "name",
      "type": "string",
      "input": "text",
      "operator": "contains",
      "value": "John"
    },
    {
      "condition": "OR",
      "rules": [
        {
          "id": "age",
          "field": "age",
          "type": "integer",
          "input": "number",
          "operator": "greater",
          "value": 25
        }
      ]
    }
  ]
}

Requirements

  • Python >= 3.8
  • Django >= 3.2

License

This project is licensed under the MIT License - see the LICENSE file for details.

Credits

This widget integrates jQuery QueryBuilder by Damien Sorel.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

If you encounter any issues or have questions, please file an issue on the GitHub repository.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_query_builder_widget-0.0.6.tar.gz (63.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_query_builder_widget-0.0.6-py3-none-any.whl (62.7 kB view details)

Uploaded Python 3

File details

Details for the file django_query_builder_widget-0.0.6.tar.gz.

File metadata

File hashes

Hashes for django_query_builder_widget-0.0.6.tar.gz
Algorithm Hash digest
SHA256 0186b57e2481f76f39be3be44b25d337bed2fd4bdca0f841b24ac644b52f9230
MD5 092430137885f39c532bd203567138dc
BLAKE2b-256 e9bfa379512a87f50766eb2d76a3a66f5e3bcdd60e7e6e070421fb072d870f9c

See more details on using hashes here.

File details

Details for the file django_query_builder_widget-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for django_query_builder_widget-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 5aea7d93a3cc0637fc0488d8e221bb082318f84f220568ce521540811dda1803
MD5 29f1ef729b991966d672013cfc855d54
BLAKE2b-256 46d557c6e8c57deb604ca7e8ffd828ad23d01494f5f9b351756ec920f4e503e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page