欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  有时候为了配置的灵活性、应用未来的需求变化、控制单张表的字段数,避免字段过多,会把一些字段设置是Json格式。
 
  这样的好处是,后面如果突然需要加多一个字段,就可以直接在加到这个json里面,既不用修改数据表,也不用修改程序,只要通知前端我在json里面加了一个字段就好了,对于未来字段设置不确定或者随时改变的情况是非常方便。
 
  但有一个不好的地方就是,配置起来很麻烦,后台可能是给到一些不懂技术的人用,他们看到这么个东西就很一脸蒙蔽,甚至有时候技术自己可能出配着配着一不小心少了个引号,少个了逗号导致json格式错误,这就会导致程序解析json错误然后出现异常,影响了线上应用。所以这样的后台对于懂技术不懂技术的人来说都是一个挑战。
 
  所以我就想着把这个json,拆解成一个表单的形式
 
  这样看起来是不是就直观很多,不管是谁来用这个后台都能很轻易的上手。
 
  原理也很简单。
 
  加载时:
 
  第1步:把 json 解析出来,把?json 里的每个字段当做是 model 的单个独立的字段去处理,赋值到对象上;
 
  第2步:自定义一个表单 form , 把这些从 json 解析出来的字段也显示到管理后台上。
 
  写入时:
 
  第1步:接收自定义表单传过来的数据后进来验证(看需求要不要做一些数据验证)
 
  第2步:把数据封装成 json 后再赋值到 model 上保存该 json 的字段,然后写入数据库保存。
 
  实现思路就这么几步,很简单,只是编码过程中会存在一些细节的问题,下面通过编码来把上面的步骤走一遍。
 
  要处理刚从数据库读出来的数据,只需要重写一下 Model 类的一个类方法from_db
 
  下面这一段是源码的from_db方法
 
  那我们要做的就是在自己的 Model 中重写这个方法,然后先调用父类的from_db方法完成数据的加载
 
  下面是我实现的把 json 解析成 model 对象字段的代码,我封装成一个类,哪个 model 需要解析 json 的直接继承这个类就好了
 
  有 2 个地方说明一下:
 
  代码中的是设置到 instance 上的字段名,prefix 指的是 json 字段的字段名,后面接 3个下划线(因为2个下划线是外键的读取方法,避免冲突),然后接上 json 是的 key。如:params= --> params___test
 
  这段代码是为了把图片解析成 ImageFieldFile 类型,这样图片在后台显示的样式就是上图的样子,这样方便图片的上传设置,否则会以图片链接的形式显示在后台。
 
  上面我们已经把 json 解析成对象的普通字段了,现在要做的就是把这些字段像 model 定义好的字段一样显示在后台。
 
  这里先假设数据表里有一个这样的 json 字段,方便理解:
 
  我们定义一个 form 如下:
 
  这里主要是重写了 ModelForm 的 clean 方法,在里面将特定数据封装成 json 然后再保存到 model 中。代码功能都带注释了。
 
  clean 里面的逻辑最好是自己跟着实现一遍,调试一下,直观的看封装过程会更容易理解,单看代码可能会有点难理解。
 
  最后一步,把上面写好的 form , 添加到admin中,还可以加一个tab,把自定义的表单单独出来一个 tab ,避免很多字段揉杂在一起显得乱。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h62156.shtml