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
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 fromfields: List of field names to include (default: all fields)field_config: Dictionary of custom configurations per fieldextra_filters: List of additional custom filtersattrs: Standard Django widget attributes
Field Configuration Options
Each field can be customized with:
widget: Input type ('text', 'textarea', 'select', 'radio', 'checkbox', 'number')choicesorvalues: List of tuples or dictionary for select optionsoperators: 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_query_builder_widget-0.0.6.tar.gz.
File metadata
- Download URL: django_query_builder_widget-0.0.6.tar.gz
- Upload date:
- Size: 63.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0186b57e2481f76f39be3be44b25d337bed2fd4bdca0f841b24ac644b52f9230
|
|
| MD5 |
092430137885f39c532bd203567138dc
|
|
| BLAKE2b-256 |
e9bfa379512a87f50766eb2d76a3a66f5e3bcdd60e7e6e070421fb072d870f9c
|
File details
Details for the file django_query_builder_widget-0.0.6-py3-none-any.whl.
File metadata
- Download URL: django_query_builder_widget-0.0.6-py3-none-any.whl
- Upload date:
- Size: 62.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5aea7d93a3cc0637fc0488d8e221bb082318f84f220568ce521540811dda1803
|
|
| MD5 |
29f1ef729b991966d672013cfc855d54
|
|
| BLAKE2b-256 |
46d557c6e8c57deb604ca7e8ffd828ad23d01494f5f9b351756ec920f4e503e9
|