提供するモデルクラス¶
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_class
と get_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)