最近在项目开发时进行模型类设计时遇到了一些问题,在这里和大家分享以下
1.BinaryField字段的序列化输出问题
项目经理的需求是将多个不同数据库的查询结果信息存放到另一个关系型数据库(比如mysql1)中,那么多个数据库的查询信息的字段上,类型上都不相同,这导致我在存储数据库(mysql1)中无法顶一个各个字段,所以我就需要将查询结果当作一个大字段存入到一个字段中,但是因为查询结果的长度不可控,且后期数据可能大量扩展,所以如果按照CharFiled的方式存储就很不方便了,因为CharField需要定义长度,不利于扩展,不方便大数据使用,所以想到了file和binary,此处需求没必要使用file,所以最后使用BinaryFiled(看需求选择),那么在选择BinaryFiled之后,存储时需要进行数据的encode,因为BinaryFiled只能进行二进制存储,但是在输出时,因为我之前使用的序列化器继承了Modelserializer,导致输出字段直接按照存储方式序列化输出,没有进行deocde,所以乱码了,然后我就进行BinaryFiled自定义输出,但是一直不起作用,依然输出乱码,那么我分析了问题的根本在哪里
,于是我在取出数据后和序列化之前,以及序列化之后对比,发现问题就出现在序列化器上,我要做的就是在序列化器之前将数据进行decode,那么我查看serializers源代码时发现,当我们继承Modelserializer时,程序自动按照class Meta的元类中指定的模型类进行序列化和输出,自定义的输出对象根本不执行,所以需要进行父类