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'}