当我们需要把两个相似的对象相互转换,其目的是在对外提供数据时需要将一部分敏感数据(例如:密码、加密token等)隐藏起来。最普通的方法是,新建一个对象,将需要的值逐个set进去。如果有多组需要这样转换的对象,那么就需要做很多只是get/set这样无意义的工作。
还可以把数据变成字典。
在这样的背景下,ModelMapper诞生了,它是一个简单、高效、智能的对象映射工具。它的使用非常简单。
下面是models使用ModeMapper的代码:
from bpmappers import RawField, DelegateField
from bpmappers.djangomodel import ModelMapper
from polls.models import Subject, Twacher
class SubjectMapper(ModelMapper):
"""学科映射器"""
isHot = RawField('is_hot')
class Meta:
model = Subject
exclude = ('is_hot', )
class SubjectSimpleMapper(ModelMapper):
"""学科简单映射器"""
class Meta:
model = Subject
fields = ('no', 'name')
class TeacherMapper(ModelMapper):
"""老师映射器"""
goodCount = RawField('good_count')
badCount = RawField('bad_count')
class Meta:
model = Twacher
exclude = ('good_count', 'bad_count', 'subject')
exclude:把字段排除在外面。
fields :包含那些字段在里面。
filelds="_all_":查询所有得 。
car = DelegateField(CarMapper)
time = RawField('offend_time')
place = RawField('offend_place')
reason = RawField('offend_reason')
RawField:把原始字段的名字改成新的名字。
DelegateField:把某个字段的处理的权利交给另一个。
上述的例子中:car本来是record这个类中的,而通过 DelegateField可以把处理的权利交给CarMapper。
car = DelegateField(CarMapper)
class Meta:
model = Twacher
上面的model=Twacher就可以把这个类变成字典。
网友评论