提供するモデルフィールドクラス

definable-serializerではシリアライザーを記述するためのフィールドと、 ユーザーからの入力データを保存するためのフィールドを提供しています。

シリアライザーの定義を保存するモデルフィールド

definable-serializerでは、JSON/YAMLで記述された文字列及びファイルからシリアライザーを作ることができます。 特にadminサイトでシリアライザーの定義を記述することで、デプロイの手間を無くすのが目的です。 adminサイト上でテキストデータの編集を行うのは難しい話ではないものの、YAMLやJSONをコードハイライト無しで記述するのはちょっとした苦行です。

この問題を解決するために、CodeMirror2ウィジェットを組み込んだシリアライザー定義用のフィールドを用意しています。

DefinableSerializerByYAMLField

class DefinableSerializerByYAMLField(*args, allow_validate_method=True, **kwargs)

DefinableSerializerByYAMLFieldは https://github.com/datadesk/django-yamlfield が 提供するYAMLFieldをラップし、CodeMirror2ウィジェットの利用及び非ASCII文字が正しく表示できるようにカスタマイズしています。

allow_validate_methodFalse の場合、シリアライザーの定義中に validate_method が記述されていると ValidationError が発生します。

その他のオプションについては https://github.com/datadesk/django-yamlfield を参照してください。

以下に記述例を示します。

class Survey(models.Model):
    ..

    question = DefinableSerializerByYAMLField()
_images/codemirror2_with_yaml.png

DefinableSerializerByJSONField

class DefinableSerializerByJSONField(*args, allow_validate_method=True, **kwargs)

DefinableSerializerByJSONFieldは https://github.com/dmkoch/django-jsonfield が 提供するJSONFieldをラップし、CodeMirror2ウィジェットの利用及び非ASCII文字が正しく表示できるようにカスタマイズしています。

allow_validate_methodFalse の場合、シリアライザーの定義中に validate_method が記述されていると ValidationError が発生します。

その他のオプションについては https://github.com/dmkoch/django-jsonfield を参照してください。

以下に記述例を示します。

class Survey(models.Model):
    ..

    question = DefinableSerializerByJSONField()
_images/codemirror2_with_json.png

ユーザーからの入力データを保存するモデルフィールド

入力された内容を保存する方法 でも取り上げたように、モデルに結びつかないシリアライザーの持つユーザーからの入力データを永続的に保存するには、 保存を担うモデルクラスのフィールドにシリアライズ(直列化)された状態でデータを保存します。

ようはPythonのネイティブなデータをテキストやバイナリに変換してデータベースのカラム、即ちモデルフィールドに保存できればどんな形でも構いません。

definable-serializerではユーザーからの入力を保存するために2つのモデルフィールドを用意しています。

JSONField

class JSONField(*args, **kwargs)

JSONは人気の高いシリアライズの形式です。しかし、Pythonに付属するjsonモジュールはPythonのネイティブなデータ型である set型 をシリアライズすることができません。

またensure_asciiの設定を行わないと非ASCII文字を "\uXXXX" で表してしまうため、入力情報を確認する際に見苦しい状態になります。

definable-serializerでは、 jsonfield が提供するJSONFieldをラップし、 これらの問題を解消するコンパチビリティクラスを提供しています。

以下に使用例を示します。

from definable_serializer.models.compat import JSONField as CompatJSONField

class Answer(models.Model):

    ..

    answer = CompatJSONField(
        verbose_name="answer data",
        help_text="answer data"
    )

このモデルフィールドを使うとadmin画面で以下のように表示されます。

_images/compat_json_field.png

非ASCII文字列が正しく表示されます

YAMLField

class YAMLField(*args, **kwargs)

YAMLはJSONと同様、テキストでデータをシリアライズします。記号が少なくインデントでデータ構造を表すため、Pythonのコードのように可読性に優れます。

definable-serializerでは、 django-yamlfield (https://github.com/datadesk/django-yamlfield) が提供するYAMLFieldをラップし、非ASCII文字が正しく表示されるコンパチビリティクラスを提供しています。

以下に使用例を示します。

from definable_serializer.models.compat import YAMLField as CompatYAMLField

class Answer(models.Model):

    ..

    answer = CompatYAMLField(
        verbose_name="answer data",
        help_text="answer data"
    )
_images/compat_yaml_field.png

非ASCII文字列が正しく表示されます