bpmappers 0.3をリリースしました

bpmappers 0.3をリリースしました。
bpmappers 0.3 : Python Package Index
今回はDelegateFieldに関するマイナーな変更のみ。
追ってドキュメントは更新していきます。
こんな感じのモデルがあったとします。

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=20)
    age = models.PositiveIntegerField()

    def __unicode__(self):
        return '%s, %d' % (self.name, self.age)

class Book(models.Model):
    title = models.CharField(max_length=30)
    author = models.ForeignKey(Person)

    def __unicode__(self):
        return '%s, %s' % (self.title, self.author)

Bookモデルを辞書にマッピングする定義を書いてみます。

from bpmappers import Mapper, fields, djangomodel
from myapp1.models import Person, Book

class PersonModelMapper(djangomodel.ModelMapper):
    class Meta:
        model = Person
        exclude = ['id']

class BookFlattenMapper(djangomodel.ModelMapper):
    author = fields.DelegateField(PersonModelMapper, attach_parent=True)

    class Meta:
        model = Book

DelegateFieldの結果で自身のMapperの出力を更新する場合に、今まではattach_FOOメソッドの定義が必須でしたが、attach_parent=Trueという指定ができるようになりました。
使ってみるとこうなります。

>>> book = Book.objects.get(pk=1)
>>> book
<Book: feizbook, feiz, 23>
>>> from mymappers import BookFlattenMapper
>>> BookFlattenMapper(book).as_dict()
{'name': u'feiz', 'age': 23, 'id': 1, 'title': u'feizbook'}