Skip to content

Serializers

This module provides enhanced serializer utilities for Django REST Framework.

It extends ModelSerializer with:

  • deterministic field ordering
  • role based field permissions
  • update protection for sensitive fields

OrderedFieldsMixin

Ensures predictable field ordering in API responses.

FIELD_ORDER = ("id", "name", "created_at")

Behavior

If FIELD_ORDER is defined:

  • Fields listed in FIELD_ORDER appear first
  • Remaining fields follow original serializer order

RoleBasedReadOnlyFieldsMixin

Controls field editability based on user role.

NON_EDITABLE_FIELDS_BY_ROLE = {
    "user": {"is_admin"},
    "staff": set(),
}

NoUpdateFieldsMixin

Prevents specific fields from being updated after creation.

class Meta:
    no_update_fields = ["email"]

Behavior

Action Behavior
create fields are writable
update fields become read-only
partial_update fields become read-only

Validation rule

no_update_fields must be:

  • list
  • or tuple

Otherwise a TypeError is raised.

How it works

  • Reads request.user.user_type
  • Matches against role configuration
  • Marks matching fields as read_only

ModelSerializer (Core Base)

The main serializer base class used in drf-corekit.

Features

  • Ordered field output
  • Role based read only fields
  • Immutable fields after creation

Combined Usage Example

from drf_corekit.serializers import ModelSerializer

class UserSerializer(ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"
        no_update_fields = ["email"]

Confirmation Serializers

Provides serializers for operations that require explicit user confirmation before execution.

Typical use cases include:

  • account suspension
  • account reactivation
  • account deactivation
  • account deletion
  • password reset triggers

ConfirmSerializer

Requires explicit confirmation before an action can proceed.

class ConfirmSerializer(serializers.Serializer):
    confirm = serializers.BooleanField()

Behavior

The request is considered valid only when:

{
  "confirm": true
}

Validation rule

If confirm is:

  • omitted
  • false

a validation error is raised.

Example

{
  "confirm": true
}

ConfirmReasonSerializer

Extends ConfirmSerializer by requiring a reason for the action.

class ConfirmReasonSerializer(ConfirmSerializer):
    reason = serializers.CharField(max_length=255)

Behavior

The request is considered valid only when:

  • confirm is true
  • reason is provided
  • reason is not blank

Example

{
  "confirm": true,
  "reason": "Violation of platform policies"
}