django-idioms
SkillDev toolsDjango ORM, class-based views, DRF serializers, migrations, pytest-django. For Python see python-idioms.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the django-idioms skill
What this skill tells your AI
The instructions your AI receives, as published by irahardianto/awesome-agv in .agents/skills/django-idioms/SKILL.md and read by ahel’s review.
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() -
Metaclass 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_relatedto avoid N+1 queries.F()andQ()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.
RunPythonwithreverse_codefor reversibility.
Testing
For universal testing principles, see
.agents/rules/testing-strategy.md. Below: language-specific patterns only.
-
pytest-djangooverunittest.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
Signals
- GitHub stars
- 156
- Forks
- 53
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
django-idioms- Source
- github.com/irahardianto/awesome-agv