问题:
class BrandSerializer(serializers.ModelSerializer):
etype = serializers.ChoiceField(choices=((0, '设备品牌'), (1, '软件品牌'), (2, '操作系统品牌')), help_text='0是设备 1是软件 2操作系统',
label='种类', )
class Meta:
model = Brand
fields = "__all__"
原本的序列化方式导致传出去的results是:
因为我使用了bootstrap-table表格框架,故传到前端的是row包含数据,不是实例对象,因此无法使用{{Model名.get_字段名称_display}}
p.s.
如果把etype单独弄个model,使其变成外键,倒是可以在model里配置:
def __str__(self):
return self.get_etype_display()
这样或许取得的就是value了。但是还是不适合我的情况
解决:
方法1.重写ChoiceField
的to_representation
表现方式:
class DisplayChoiceField(serializers.ChoiceField):
def to_representation(self, obj):
"""返回选项的值"""
return self._choices[obj]
这样的话,在序列化的时候自定义etype的序列化为:
etype = DisplayChoiceField(choices=((0, '设备品牌'), (1, '软件品牌'), (2, '操作系统品牌')), help_text='0是设备 1是软件 2操作系统', label='种类', )
就行了
方法2.
class BrandSerializer(serializers.ModelSerializer):
etype = serializers.SerializerMethodField()
class Meta:
model = Brand
fields = "__all__"
def get_etype(self,obj):
return obj.get_etype_display()
这两种方式都能导致以下结果: