Skip to main content

Advanced CRUD for perfectionists with deadlines. An opinionated Neapolitan extension, with sprinkles.

Project description

Django PowerCRUD

Run Test Matrix

Security

codecov

Python

Django

Renovate

PyPI

License

Advanced CRUD for perfectionists with deadlines. An opinionated Django package for shipping production-grade CRUD screens with filtering, bulk operations, inline editing, and async workflows.

PowerCRUD extends Neapolitan’s view layer with the practical infrastructure needed for real operational interfaces.

Why PowerCRUD

  • Production-ready CRUD – faster
    HTMX responses, modal forms, inline row editing, and filter sidebars are configured through class attributes rather than custom templates.

  • Bulk operations that scale
    Start synchronously with selection persistence and validation controls, then opt into async queueing with conflict locks, progress polling, and an optional dashboard when jobs run longer.

  • One async toolkit everywhere
    The async manager, conflict handling, and progress API are reusable from admin actions, management commands, or bespoke launch sites so background work behaves consistently.

  • Batteries included
    Sample app, Docker dev stack, management commands, Tailwind safelist tooling, and a maintained pytest/Playwright suite keep the project teachable and testable.

See the full documentation.

Key Features

  • HTMX-enabled CRUD views with modal create/edit/delete flows.
  • Inline row editing with dependency-aware widgets, lock checks, and permission guards.
  • Bulk edit/delete with selection persistence and an optional async path.
  • Async infrastructure: conflict locks, progress cache, django-q2 workers, cleanup command, optional dashboard persistence.
  • Filtering, sorting, and pagination helpers backed by tuned templates.
  • Template-pack support: built-in DaisyUI, maintained Bootstrap 5, and a public contract for authors to create and publish compatible packs.
  • Styling controls, template and pack scaffolding, and Tailwind safelist extraction.
  • Extension hooks for custom actions, buttons, and templates, illustrated in the bundled sample app.
  • Two supported API styles: direct class-attribute configuration plus structured declarations for repeated field and action intent.
  • Tooling support: Dockerised dev environment, management commands, pytest + Playwright coverage.

Quick Examples

Core CRUD (synchronous)

from neapolitan.views import CRUDView
from powercrud.mixins import PowerCRUDMixin


class ProjectCRUDView(PowerCRUDMixin, CRUDView):
    model = Project
    base_template_path = "core/base.html"

    # Core configuration
    fields = ["name", "owner", "status", "created_date"]
    properties = ["is_overdue"]
    filterset_fields = ["owner", "status", "created_date"]
    paginate_by = 25

    # UX helpers
    use_htmx = True
    use_modal = True
    inline_edit_fields = ["status", "owner"]

    # Bulk operations (synchronous)
    bulk_fields = ["status", "owner"]
    bulk_delete = True

This single view serves a filtered list, modal forms, inline edits, and synchronous bulk edits - no async stack required.

Async bulk (opt-in)

from neapolitan.views import CRUDView
from powercrud.mixins import PowerCRUDAsyncMixin


class ProjectAsyncCRUDView(PowerCRUDAsyncMixin, CRUDView):
    model = Project
    base_template_path = "core/base.html"

    bulk_fields = ["status", "owner"]
    bulk_delete = True
    bulk_async = True
    bulk_min_async_records = 20
    bulk_async_conflict_checking = True

    # Optional async dashboard manager
    async_manager_class_path = "myapp.async_manager.AppAsyncManager"

Here async queueing is explicit: you opt in by using PowerCRUDAsyncMixin, enabling bulk_async, and configuring django-q2 (django_q in INSTALLED_APPS, Q_CLUSTER, and any POWERCRUD_SETTINGS overrides you need).

Getting Started

Tooling & References

  • Sample app – complete walkthrough of every feature.
  • Docker dev environment – Django, Postgres, Redis, Vite, django-q2.
  • Management commands – template and pack scaffolding, Tailwind safelist extraction, async cleanup.
  • Testing – pytest matrix, blocking Playwright smoke tests, and a fuller local browser regression suite.

Supported Versions

PowerCRUD is tested against the following combinations:

  • Python 3.12 with Django 5.2 and 6.0
  • Python 3.13 with Django 5.2 and 6.0
  • Python 3.14 with Django 5.2 and 6.0

The CI matrix exercises each supported pairing automatically.

Development Setup

PowerCRUD’s development environment is Docker-first. From the project root:

./runproj up          # build images, start services, enter the Django container
./runtests           # run the full local test suite, including the full Playwright browser suite

Dependencies are managed with uv; the Docker image installs them into the system interpreter so you never need to activate a virtual environment inside the container. See the Dockerised Development Environment guide for full details.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

django_powercrud-0.9.1.tar.gz (435.5 kB view details)

Uploaded Source

Built Distribution

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

django_powercrud-0.9.1-py3-none-any.whl (547.0 kB view details)

Uploaded Python 3

File details

Details for the file django_powercrud-0.9.1.tar.gz.

File metadata

  • Download URL: django_powercrud-0.9.1.tar.gz
  • Upload date:
  • Size: 435.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for django_powercrud-0.9.1.tar.gz
Algorithm Hash digest
SHA256 a7c688e306cd5cbd973a4d702d9755c18c8ecaa36ecf606d99cc2dcb698da885
MD5 669f21ead00b05082d53a360bc936a5e
BLAKE2b-256 fbe7d62a64c89a46afeb851811216be4f54163bcc5d03aaa2518dfe44a783375

See more details on using hashes here.

File details

Details for the file django_powercrud-0.9.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_powercrud-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a22f470ee5c331656abbb4c11679c9841e8d2d033c83dbd3d61d7fb17356b5f7
MD5 e78d2c722c322a8ded52fc4943122d59
BLAKE2b-256 8e739859fbcf6d829e6ee7281b3e368348ec77814ac484542a411050b2354ef7

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