Лёгкая интеграция django-basemodels с Django REST Framework. Предоставляет готовый BaseModelSerializer, который корректно сериализует ключевые поля базовой модели: pk, created_at, updated_at, active_start, active_end, а также дополнительные вычисляемые поля is_active и polymorphic_ctype.
# в том же окружении, где установлен django-basemodels и DRF
poetry add django-basemodels-rest
poetry add djangorestframeworkdjango-basemodelsdjangorestframework
BaseModelSerializer—ModelSerializer, который:- возвращает
is_activeпо свойствуis_active_real(учёт временных границ и состояния Celery), - возвращает
polymorphic_ctype(idтипа полиморфной модели), - предоставляет базовый набор полей для всех моделей-наследников
BaseModel.
- возвращает
# serializers.py
from rest_framework import viewsets
from django_basemodels_rest.serializers import BaseModelSerializer
from .models import Article # Article наследует BaseModel
class ArticleSerializer(BaseModelSerializer):
class Meta(BaseModelSerializer.Meta):
model = Article
fields = BaseModelSerializer.Meta.fields + ("title", "body")
writable_fields = ("title", "body")# views.py
from rest_framework import viewsets
from .models import Article
from .serializers import ArticleSerializer
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer- Для добавления полей — унаследуйте
BaseModelSerializerи добавьте нужные поля вMeta.fields. - Для записи указывайте
writable_fieldsвMeta— по умолчанию сериализатор делает все стандартные поля (pk,created_at,updated_at) только для чтения.
- При тестах учитывайте, что
is_activeсериализуется изis_active_real. Для моков патчьте ту функцию, которую использует код сериализатора (в зависимости от того, как реализован импорт вdjango_basemodels). - Подключение пакета в проект не создаёт миграций — используйте миграции ваших моделей-наследников.
MIT