提供するモデルクラス

definable-serializerでは、 シリアライザーの定義を保存するモデルフィールド で紹介したシリアライザーの定義を記述するためのモデルフィールドを提供しています。

このシリアライザー定義用フィールドからシリアライザークラスを取り出すには、2つの方法があります。

1つは定義用フィールドからYAML/JSON文字列を取り出し build_serializer_by_yaml関数build_serializer_by_json関数 に渡す方法です。 もう1つは AbstractDefinitiveSerializerModel を継承したモデルクラスを用意する方法です。

ここでは、AbstractDefinitiveSerializerModel が提供する機能について説明します。

AbstractDefinitiveSerializerModel

class AbstractDefinitiveSerializerModel(*args, **kwargs)

このモデルクラスは django.db.models.Model を親クラスとしており、 __init__ メソッドの中で DefinableSerializerByYAMLField および DefinableSerializerByJSONField を利用しているフィールドを自動で探し、 get_<フィールド名>_serializer_class というメソッドをモデルオブジェクトに付与します。

モデルクラスは複数のシリアライザー定義用のフィールドを持つことも可能です。 以下のようなモデルクラスを定義した場合、 get_foo_serializer_classget_bar_serializer_class という2つのメソッドが自動でモデルオブジェクトに付与されます。

from definable_serializer.models import (
    DefinableSerializerByYAMLField,
    DefinableSerializerByJSONField,
    AbstractDefinitiveSerializerModel,
)

class MyModel(AbstractDefinitiveSerializerModel):
    ...

    foo = DefinableSerializerByYAMLField()
    bar = DefinableSerializerByJSONField()
>>> my_model = MyModel.objects.get(pk=1)
>>> my_model.get_foo_serializer_class
function
>>> my_model.get_bar_serializer_class
function
>>> my_model.get_foo_serializer_class()
NameEntry():
    first_name = CharField(max_length=100, required=True)
    last_name = CharField(max_length=100, required=True)

>>> my_model.get_bar_serializer_class()
Group():
    group_name = CharField(label='Group name', required=True)
    persons = Person(many=True):
        first_name = CharField(required=True)
        last_name = CharField(required=True)