bpmappers 0.8 ドキュメント

Djangoフレームワークのモデルをマッピングする

«  同じ階層にマッピング結果をマージする   ::   コンテンツ   ::   リファレンス  »

Djangoフレームワークのモデルをマッピングする

Djangoフレームワークのモデルインスタンスをマッピングする場合、 bpmappers.djangomodel.ModelMapper を使用することができます。

Djangoフレームワークのバージョン

bpmappers.djangomodel は、Djangoフレームワークのバージョンが 1.0 から 1.7 に対応しています。

1.0 以前のバージョンへの対応予定は、今のところありません。

注釈

DjangoフレームワークのPython3サポートは、Django 1.5 からで、Python 3.2 以降のみで動作します。そのため、 bpmappers.djangomodel モジュールのPython3サポートも Django 1.5 かつ Python 3.2 以降のみ対応となります。

ModelMapperの使用

ModelMapperを使用するには、 ModelMapper を継承したクラスを定義します。

次のようなモデルを定義したとします:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=10)

class Book(models.Model):
    title = models.CharField(max_length=10)
    author = models.Foreignkey(Person)

ModelMapper を使ってBookモデルを辞書にマッピングするための定義は次のようになります:

from bpmappers.djangomodel import ModelMapper
from myapp.models import Book

class BookMapper(ModelMapper):
    class Meta:
        model = Book

ModelMapper を使わない場合は次のようになります:

from bpmappers import Mapper, RawField, DelegateField

class PersonMapper(Mapper):
    id = RawField()
    name = RawField()

class BookMapper(Mapper):
    id = RawField()
    title = RawField()
    author = DelegateField(PersonMapper)

仕組み

ModelMapper は、Djangoモデルクラスの Model._meta.fields のモデルフィールドの定義を参照してマッピングフィールドを作成しています。

モデルフィールドとマッピングフィールドの対応は次の通りです:

Djangoのモデルフィールド bpmappersのフィールド
AutoField bpmappers.RawField
CharField bpmappers.RawField
TextField bpmappers.RawField
IntegerField bpmappers.RawField
DateTimeField bpmappers.RawField
DateField bpmappers.RawField
TimeField bpmappers.RawField
BooleanField bpmappers.RawField
FileField bpmappers.djangomodel.DjangoFileField
ForeignKey bpmappers.DelegateField
ManyToManyField bpmappers.ListDelegateField

Metaインナークラス

ModelMapper を継承したクラスには、 Meta インナークラスを定義する必要があります。このクラスで定義した内容から、マッピングルールが生成されます。

Meta.model

Djangoのモデルクラスを指定します。

Meta.fields

Meta.model で指定したモデルクラスのフィールドのうち、マッピング対象とするフィールド名をシーケンス型で列挙します。省略した場合はすべてのフィールドがマッピング対象になります。

Meta.exclude

Meta.model で指定したモデルクラスのフィールドのうち、マッピング対象から除外するフィールド名をシーケンス型で列挙します。省略した場合は、すべてのフィールドがマッピング対象になります。

«  同じ階層にマッピング結果をマージする   ::   コンテンツ   ::   リファレンス  »