django-ormlisted
Install: claude install-skill lgzarturo/codeconductor
## When to Use
- Writing or reviewing queryset code in any `apps/*/`
- Adding aggregations, filters, or annotations to a queryset
- Writing model `save()` overrides or signals
- Implementing service-layer DB operations
- Optimizing queries that traverse FK relationships
## Performance Fundamentals
### The N+1 Problem
The most common Django mistake: iterating over a queryset and accessing FK
fields without `select_related`. Each access generates a separate DB query.
```
# Initial query: 1 query
products = Product.objects.all()
# In the loop: N additional queries (one per product)
for p in products:
print(p.category.name) # category_id → SELECT * FROM category WHERE id = ?
# Total: 1 + N queries
```
### Solution: select_related and prefetch_related
| Method | Use | SQL Query |
| ---------------------------------- | -------------------------- | ------------------------ |
| `select_related` | FK one-to-one or ManyToOne | Automatic JOIN |
| `prefetch_related` | Reverse FK or ManyToMany | 2 separate queries |
| `prefetch_related` with `Prefetch` | Custom queryset | Filtered in nested query |
```python
# FK traversal — use select_related
products = Product.objects.select_related("category", "tax")
# Multiple FK
products = Product.objects.select_related("category", "tax", "supplier")
# Reverse FK (one-to-many) — use prefetch_related
categor