DjangoQL

0.19.1 · active · verified Wed Apr 15

DjangoQL is an advanced search language for Django, providing auto-completion and supporting logical operators, parentheses, table joins, and working with any Django model. The current version is 0.19.1, and it is actively maintained with regular updates. It's tested against a wide range of Python (2.7, 3.6–3.14) and Django (1.8–6.0) versions.

Warnings

Install

Imports

Quickstart

To integrate DjangoQL into your Django project, first add 'djangoql' to your `INSTALLED_APPS`. For Django Admin integration, inherit `DjangoQLSearchMixin` in your `ModelAdmin` class. This replaces or augments the default Django search functionality. You can also use `DjangoQLQuerySet` or `apply_search` for programmatic querying outside the admin.

import os
import django
from django.conf import settings
from django.db import models
from django.contrib import admin

# Minimal Django setup (usually done in settings.py)
if not settings.configured:
    settings.configure(
        INSTALLED_APPS=[
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'djangoql', # Add djangoql to installed apps
            'myapp' # A dummy app for models
        ],
        DATABASES={'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:'}},
        ROOT_URLCONF=__name__,
        SECRET_KEY='super-secret',
        TEMPLATES=[
            {
                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                'APP_DIRS': True,
                'OPTIONS': {
                    'context_processors': [
                        'django.template.context_processors.debug',
                        'django.template.context_processors.request',
                        'django.contrib.auth.context_processors.auth',
                        'django.contrib.messages.context_processors.messages',
                    ],
                },
            },
        ],
        STATIC_URL='/static/',
    )
    django.setup()


# myapp/models.py
class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=100)
    published_year = models.IntegerField(default=2000)
    in_stock = models.BooleanField(default=True)

    def __str__(self):
        return self.title

# myapp/admin.py
from djangoql.admin import DjangoQLSearchMixin

class BookAdmin(DjangoQLSearchMixin, admin.ModelAdmin):
    list_display = ('title', 'author', 'published_year', 'in_stock')
    search_fields = ('title', 'author') # Optional: enables standard Django search alongside DjangoQL

admin.site.register(Book, BookAdmin)

# Example of using DjangoQLQuerySet outside admin
from djangoql.queryset import DjangoQLQuerySet

class BookQuerySet(DjangoQLQuerySet):
    pass

Book.add_to_class('objects', BookQuerySet.as_manager())

# To demonstrate, run `python manage.py createsuperuser` and then `python manage.py runserver`
# Navigate to /admin/myapp/book/ to see DjangoQL in action.
# Example query in DjangoQL search bar: `author = "Tolkien" and published_year > 1950`

view raw JSON →