A collection of Django utilities: Admin mixins, testing helpers, and common patterns
Project description
Django Toolkit
A collection of Django utilities: Admin mixins, testing helpers, and common patterns.
Installation
# From GitHub
uv add git+https://github.com/froggen/django-toolkit.git
# Local development
uv add --editable ../django-toolkit
Modules
toolkit.admin - Admin Mixins
from django.contrib import admin
from toolkit.admin import OwnerMixin, ReadOnlyMixin
from unfold.admin import ModelAdmin
@admin.register(Project)
class ProjectAdmin(OwnerMixin, ModelAdmin):
owner_field = "user" # Users can only edit their own projects
toolkit.testing - Testing Utilities
from toolkit.testing import has_index_on_columns, get_table_constraints
# Verify database indexes exist
def test_status_index_exists():
assert has_index_on_columns("invoice", ["status", "created_at"])
Available Admin Mixins
Permission Control
| Mixin | Description |
|---|---|
SuperuserOnlyMixin |
Only superusers can access |
ReadOnlyMixin |
No add/change/delete, view only |
CRUDMixin |
Basic CRUD for active users |
OwnerMixin |
Users can only access their own data |
ReadOnlyOwnerMixin |
View-only for owned data |
Special Patterns
| Mixin | Description |
|---|---|
ActionsOnlyMixin |
Hide save buttons, use actions only |
SingleObjectMixin |
Redirect to edit/add page (for one-per-user models) |
Inline Mixins
| Mixin | Description |
|---|---|
InlineCRUDMixin |
CRUD for inline models |
ReadOnlyInlineMixin |
Read-only inline |
UI Helpers
| Mixin | Description |
|---|---|
HideRelatedFieldButtonsMixin |
Hide add/edit/delete buttons on FK fields |
Testing Utilities
| Function | Description |
|---|---|
get_table_constraints(table_name) |
Get all constraints and indexes for a table |
has_index_on_columns(table_name, columns) |
Check if an index exists on specified columns |
Usage Examples
Owner-based Permission
@admin.register(Article)
class ArticleAdmin(OwnerMixin, ModelAdmin):
owner_field = "author"
list_display = ["title", "author", "created_at"]
Nested Owner Field
@admin.register(Comment)
class CommentAdmin(OwnerMixin, ModelAdmin):
owner_field = "post__author" # Comment -> Post -> Author
Read-only with Owner Filter
@admin.register(Order)
class OrderAdmin(ReadOnlyOwnerMixin, ModelAdmin):
owner_field = "customer"
Single Object (e.g., User Profile)
@admin.register(UserProfile)
class UserProfileAdmin(SingleObjectMixin, OwnerMixin, ModelAdmin):
owner_field = "user"
Actions Only (e.g., Approval Workflow)
@admin.register(WithdrawalRequest)
class WithdrawalRequestAdmin(ActionsOnlyMixin, ModelAdmin):
readonly_fields = ["amount", "status", "created_at"]
actions_submit_line = ["approve_action", "reject_action"]
Index Validation in Tests
import pytest
from toolkit.testing import has_index_on_columns
@pytest.mark.django_db
class TestDatabaseIndexes:
def test_composite_index_exists(self):
assert has_index_on_columns("booking", ["status", "start"])
def test_single_column_index_exists(self):
assert has_index_on_columns("payment", ["transaction_id"])
License
MIT
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
cuz_toolkit-0.2.0.tar.gz
(90.4 kB
view details)
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 cuz_toolkit-0.2.0.tar.gz.
File metadata
- Download URL: cuz_toolkit-0.2.0.tar.gz
- Upload date:
- Size: 90.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fba9da61d243191bc53ab6929bf50a88cd76aa10a30b499d53028e2612c60712
|
|
| MD5 |
706dca6017a91bae616635a7444d46f7
|
|
| BLAKE2b-256 |
a4ddbbb85ab8bbcc4cb563c3ce825a713a851efbd49bd99c2069ace1fe2de0f1
|
File details
Details for the file cuz_toolkit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cuz_toolkit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 59.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
49e679145ddd8a0b9b149d9588338a9ce82b0a6604706aa37beb7717ff7cae24
|
|
| MD5 |
1841fb87fe83aa5741fbdd050f6e12a8
|
|
| BLAKE2b-256 |
590f4b3fecc2ffe86373dcc682feb20435e4af4f3410ea3aab51456a3aa8c47b
|