106.ModelMapper模型映射器

2020-01-09  本文已影响0人  羽天驿

当我们需要把两个相似的对象相互转换,其目的是在对外提供数据时需要将一部分敏感数据(例如:密码、加密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就可以把这个类变成字典。


上一篇 下一篇

猜你喜欢

热点阅读