How to Use DRF Integration¶
django-stratagem has optional Django REST Framework support for serializing registry choices in API endpoints.
Installation¶
Install with DRF support:
pip install django-stratagem[drf]
DrfRegistryField¶
A DRF ChoiceField for single registry selection. Accepts slugs or fully qualified names (FQNs) as input and returns the implementation class as internal value.
from rest_framework import serializers
from django_stratagem.drf.serializers import DrfRegistryField
class NotificationSerializer(serializers.Serializer):
strategy = DrfRegistryField(registry=NotificationRegistry)
Parameters:
registryThe registry class. Required.
representationHow to serialize values.
"slug"(default) outputs the slug, otherwise outputs the FQN.
DrfMultipleRegistryField¶
A DRF MultipleChoiceField for multiple registry selection.
from django_stratagem.drf.serializers import DrfMultipleRegistryField
class NotificationSerializer(serializers.Serializer):
strategies = DrfMultipleRegistryField(registry=NotificationRegistry)
Backward Compatibility Aliases¶
DrfStrategyField=DrfRegistryFieldDrfMultipleStrategyField=DrfMultipleRegistryField
API Views¶
Two built-in views return registry data as JSON:
RegistryChoicesAPIView¶
Returns choices for a registry, optionally filtered by parent.
GET /api/registry/choices/?registry=NotificationRegistry
GET /api/registry/choices/?registry=SubcategoryRegistry&parent=electronics
Response:
{
"choices": [["email", "Email Notification"], ["sms", "SMS Notification"]],
"registry": "NotificationRegistry",
"parent": null
}
RegistryHierarchyAPIView¶
Returns hierarchy maps for all hierarchical registries.
GET /api/registry/hierarchy/
Response:
{
"hierarchies": {
"SubcategoryRegistry": {
"parent_registry": "CategoryRegistry",
"hierarchy_map": {
"electronics": ["phones", "tablets"],
"clothing": ["shirts"]
}
}
}
}
URL Configuration¶
Include the DRF URLs in your urlpatterns:
from django.urls import include, path
urlpatterns = [
path("stratagem/", include("django_stratagem.drf.urls")),
]
This registers:
stratagem/api/registry/choices/-RegistryChoicesAPIViewstratagem/api/registry/hierarchy/-RegistryHierarchyAPIView