| name | django-idioms |
| description | Django ORM, class-based views, DRF serializers, migrations, pytest-django. For Python see python-idioms. |
| paths | ["**/views.py","**/models.py","**/urls.py","**/manage.py"] |
Django Idioms and Patterns
Django rewards convention, the ORM, and "batteries included" design. Idiomatic Django = DRY, model-centric, well-tested.
Scope: Django-specific patterns. For Python: @.agents/skills/python-idioms/SKILL.md.
Models
-
Fat models, thin views โ business logic in models/managers, not views.
-
Custom managers for common queries:
class TaskManager(models.Manager):
def active(self):
return self.filter(status='active')
class Task(models.Model):
objects = TaskManager()
-
Meta class for ordering, constraints, indexes.
Views
-
Class-based views for CRUD, function-based for simple/custom:
class TaskListView(LoginRequiredMixin, ListView):
model = Task
queryset = Task.objects.active()
paginate_by = 25
-
DRF serializers for API boundaries:
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
fields = ['id', 'title', 'priority', 'created_at']
read_only_fields = ['id', 'created_at']
ORM
select_related/prefetch_related to avoid N+1 queries.
F() and Q() expressions for complex queries.
- Never raw SQL unless ORM can't express it (and then use parameterized queries).
Migrations
- One migration per logical change. Squash when history grows.
- Data migrations in separate migration files from schema changes.
RunPython with reverse_code for reversibility.
Testing
For universal testing principles, see .agents/rules/testing-strategy.md. Below: language-specific patterns only.
-
pytest-django over unittest.TestCase:
@pytest.mark.django_db
def test_create_task():
task = Task.objects.create(title='Test', priority='high')
assert task.title == 'Test'
-
Factory Boy for test data (not fixtures).
Formatting and Static Analysis
| Tool | Purpose | Command |
|---|
ruff | Formatting + linting | ruff format . && ruff check . |
mypy + django-stubs | Type checking | mypy . |
bandit | Security | bandit -r . |
Related
- Code Idioms and Conventions @.agents/rules/code-idioms-and-conventions.md
- Python Idioms @.agents/skills/python-idioms/SKILL.md
- Security Principles @.agents/rules/security-principles.md
- Architectural Patterns @.agents/rules/architectural-pattern.md
- Database Design Principles @.agents/rules/database-design-principles.md
- Error Handling Principles @.agents/rules/error-handling-principles.md
- Testing Strategy @.agents/rules/testing-strategy.md
- Logging and Observability Mandate @.agents/rules/logging-and-observability-mandate.md
- Logging and Observability Principles @.agents/skills/logging-implementation/SKILL.md