---
url: "https://vueda.dev/v3/reference/api/py/vueda.core.serializers.md"
title: "core.serializers"
---

# core.serializers

## Overview

Serializer base classes combining flex-fields, nested writes, and validation.

## Submodules

- [fields](/v3/reference/api/py/vueda.core.serializers.fields.md)

## Classes

- [EmailSettingsBaseSerializer](/v3/reference/api/py/vueda.core.serializers/EmailSettingsBaseSerializer.md)
- [ExcludeFieldsSerializerMixin](/v3/reference/api/py/vueda.core.serializers/ExcludeFieldsSerializerMixin.md)
- [FlexFieldsWriteableNestedSerializerMixin](/v3/reference/api/py/vueda.core.serializers/FlexFieldsWriteableNestedSerializerMixin.md)
- [GenericForeignKeySerializer](/v3/reference/api/py/vueda.core.serializers/GenericForeignKeySerializer.md)
- [MakeReadonly](/v3/reference/api/py/vueda.core.serializers/MakeReadonly.md)
- [ModelPrimaryKeyValueField](/v3/reference/api/py/vueda.core.serializers/ModelPrimaryKeyValueField.md)
- [NoExtraFieldsSerializerMixin](/v3/reference/api/py/vueda.core.serializers/NoExtraFieldsSerializerMixin.md)
- [PrimaryKeyListSerializer](/v3/reference/api/py/vueda.core.serializers/PrimaryKeyListSerializer.md)
- [VuedaExpandableFieldsSerializerMixin](/v3/reference/api/py/vueda.core.serializers/VuedaExpandableFieldsSerializerMixin.md)
- [VuedaListSerializer](/v3/reference/api/py/vueda.core.serializers/VuedaListSerializer.md)
- [VuedaLookupSerializer](/v3/reference/api/py/vueda.core.serializers/VuedaLookupSerializer.md)
- [VuedaReadonlyListSerializer](/v3/reference/api/py/vueda.core.serializers/VuedaReadonlyListSerializer.md)
- [VuedaReadonlySerializer](/v3/reference/api/py/vueda.core.serializers/VuedaReadonlySerializer.md)
- [VuedaSerializer](/v3/reference/api/py/vueda.core.serializers/VuedaSerializer.md)
- [WorkflowFieldsSerializerMixin](/v3/reference/api/py/vueda.core.serializers/WorkflowFieldsSerializerMixin.md)

## `ensure_flex_fields_applied` {#ensure_flex_fields_applied}

Apply the request's query-param-driven expand/fields/omit resolution (``_flex_options_rep_only``)
to ``serializer.fields``. ``rest_flex_fields2`` only applies this resolution automatically inside
``to_representation()``; merely accessing ``.fields`` does not, because the ``get_fields()`` that
triggers applies a separate, constructor-kwarg-driven options set (``_flex_options_base``)
instead, which is empty for a serializer built the normal way from a request.

Needed by a caller that must inspect the resolved field tree -- which fields a request's ``?e=``
actually turned into nested serializers -- without first serializing an instance, such as a
queryset's prefetch plan (``vueda.core.viewsets.build_prefetch_plan``).

A no-op if this serializer instance already applied it, whether by a prior call here or by
``to_representation`` itself, so calling this before a representation happens does not double
the expansion work or clobber ``fields`` that expansion already added to.

### Signature {#ensure_flex_fields_applied-signature}

`ensure_flex_fields_applied(serializer)`

#### Parameters {#ensure_flex_fields_applied-parameters}

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| <span id="ensure_flex_fields_applied-param-serializer">serializer</span> |  | yes |  |  |

### Source {#ensure_flex_fields_applied-source}

`server/vueda/core/serializers/__init__.py:185`

## Source

`server/vueda/core/serializers/__init__.py`
