Help us improve
Share bugs, ideas, or general feedback.
From saleor-commerce
Writes Python/Django code for Saleor using ORM patterns, signals, Celery tasks, type hints, migrations, management commands, and async views.
npx claudepluginhub orcaqubits/agentic-commerce-skills-plugins --plugin saleor-commerceHow this skill is triggered — by the user, by Claude, or both
Slash command
/saleor-commerce:python-djangoThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Fetch live docs**:
Provides Django 5.x expertise for scalable web apps using async views, DRF, Celery, Django Channels, with architecture, testing, security, and deployment guidance.
Provides 2025 Django patterns for project structure, settings, naming conventions, models with type hints and indexes, async support. Activates on Django models, views, URLs, forms, templates, commands, structure.
Provides production-grade Django architecture patterns including project structure, split settings, REST API design with DRF, ORM best practices, caching, signals, and middleware.
Share bugs, ideas, or general feedback.
Fetch live docs:
site:docs.djangoproject.com topics models querysets for current Django ORM documentationsite:docs.djangoproject.com topics signals for Django signals referencesite:docs.celeryq.dev userguide tasks for Celery task patterns and configurationsite:docs.saleor.io developer for Saleor-specific Django conventionshttps://docs.python.org/3/library/typing.html for Python type hints reference| Operation | Method | Example Use |
|---|---|---|
| Filter | .filter(**kwargs) | Filter products by type |
| Exclude | .exclude(**kwargs) | Exclude draft orders |
| Annotate | .annotate(expr) | Add computed fields (totals, counts) |
| Aggregate | .aggregate(expr) | Compute sum, avg across queryset |
| Select related | .select_related("fk") | Join foreign keys (avoid N+1) |
| Prefetch related | .prefetch_related("m2m") | Batch-load many-to-many (avoid N+1) |
| Values | .values("field") | Return dictionaries instead of objects |
| Order by | .order_by("field") | Sort results |
| Object | Purpose | Example Use |
|---|---|---|
F("field") | Reference model field in expressions | Update stock: F("quantity") - 1 |
Q(condition) | Complex lookups with OR/AND/NOT | `Q(status="active") |
F() for atomic field updates without race conditionsQ() objects with | (OR), & (AND), ~ (NOT) for complex filters| Relationship | Field Type | Example |
|---|---|---|
| One-to-Many | ForeignKey | Order -> User, OrderLine -> Order |
| Many-to-Many | ManyToManyField | Product -> Category (via ProductCategory) |
| One-to-One | OneToOneField | User -> UserProfile |
| Generic | GenericForeignKey | Attribute values on multiple entity types |
on_delete explicitly (CASCADE, PROTECT, SET_NULL)related_name for reverse lookups| Signal | Fires When | Common Use |
|---|---|---|
pre_save | Before model.save() | Validate or transform data |
post_save | After model.save() | Trigger side effects, send notifications |
pre_delete | Before model.delete() | Clean up related resources |
post_delete | After model.delete() | Remove cached data |
m2m_changed | Many-to-many field modified | Update denormalized counters |
AppConfig.ready() to avoid import issues| Pattern | Decorator | Use Case |
|---|---|---|
| Shared task | @shared_task | Framework-agnostic, recommended |
| App task | @app.task | Tied to specific Celery app |
| Bound task | @shared_task(bind=True) | Access self for retries |
| Parameter | Description | Example |
|---|---|---|
max_retries | Maximum retry attempts | 3 |
default_retry_delay | Seconds between retries | 60 |
retry_backoff | Enable exponential backoff | True |
autoretry_for | Exception classes to auto-retry | (ConnectionError,) |
acks_late | Acknowledge after execution | True (prevents task loss) |
soft_time_limit and time_limit| Type | Import | Use |
|---|---|---|
Optional[T] | typing | Value may be None |
list[T] | Built-in (3.9+) | Typed list |
dict[K, V] | Built-in (3.9+) | Typed dictionary |
Union[A, B] | typing | Either type A or B |
Protocol | typing | Structural subtyping (duck typing) |
TypedDict | typing | Typed dictionary with fixed keys |
Literal["a", "b"] | typing | Restrict to specific values |
from __future__ import annotations for postponed evaluationmypy or pyright for static type checking| Command | Purpose |
|---|---|
python manage.py makemigrations | Generate migration files from model changes |
python manage.py migrate | Apply pending migrations to database |
python manage.py showmigrations | List all migrations and their status |
python manage.py sqlmigrate app_name 0001 | Show SQL for a specific migration |
python manage.py squashmigrations app_name 0001 0010 | Combine multiple migrations |
RunPython for data migrations (separate from schema migrations)| Aspect | Convention |
|---|---|
| Location | app_name/management/commands/command_name.py |
| Class | Subclass BaseCommand |
| Entry point | handle(self, *args, **options) method |
| Arguments | Use add_arguments(self, parser) with argparse |
| Output | Use self.stdout.write() and self.style |
help text to commands for documentation| Feature | Sync | Async |
|---|---|---|
| View type | def view(request) | async def view(request) |
| Server | WSGI (Gunicorn) | ASGI (Uvicorn, Daphne) |
| ORM access | Direct | Wrap in sync_to_async |
| HTTP calls | requests | httpx (async) |
sync_to_async or QuerySet.aiterator()httpx.AsyncClient for non-blocking HTTP requests| Pattern | Description |
|---|---|
| Environment variables | Load with os.environ or django-environ |
| Split settings | settings/base.py, settings/dev.py, settings/prod.py |
| Twelve-Factor | All configuration via environment variables |
| Tool | Command | Notes |
|---|---|---|
| venv | python -m venv .venv | Built-in, standard |
| poetry | poetry install | Dependency resolution, lock file |
| uv | uv venv && uv pip install -r requirements.txt | Fast Rust-based installer |
select_related and prefetch_related to avoid N+1 query problemsmypy for static analysisF() expressions for atomic field updates instead of read-modify-writehttpx for I/O-heavy endpointsFetch the Python and Django documentation for current ORM patterns, Celery task configuration, and async view setup before implementing.