Djangoフレームワークのモデルをマッピングする¶
Djangoフレームワークのモデルインスタンスをマッピングする場合、 bpmappers.djangomodel.ModelMapper
を使用することができます。
Djangoフレームワークのバージョン¶
bpmappers.djangomodel
は、Djangoフレームワークのバージョン 1.8 以上に対応しています。
ModelMapperの使用¶
ModelMapperを使用するには、 ModelMapper を継承したクラスを定義します。
Djangoで次のようなモデルを定義したとします:
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のモデルフィールドとbpmppersのフィールドの対応は次の通りです:
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
で指定したモデルクラスのフィールドのうち、マッピング対象から除外するフィールド名をシーケンス型で列挙します。省略した場合は、すべてのフィールドがマッピング対象になります。