给Django模型加上依赖条件的“伪”必填属性

近被分配一个将用户表格电子化的任务。表格很大,打印版出来有3页多,而且许多项都是必填的。考虑到网络的不稳定,随时保存的功能是必不可少的。因为随时保存的特性的引入,所以不仅在form上无法做用required来限定,在model上的每一条字段也都要求允许null或者空字符。那么一个问题就出来了,如何验证一个表格实例是否已经完成呢?

一个很直观的想法,就是给这个表格模型添加一个验证函数,在调用时逐个检查每个字段是否为空。这是一个很不错方法,事实上Django对form的验证也是使用这样的思路。但是这个表单有一个比较特殊的地方,就是部分字段是否是必填依赖与其他字段。如果依照Django form框架的逻辑,那就为每个字段建立相应clean_foo的方法,在需要验证时利用自省进行调用。嗯,这样应该也可以吧。不过既然django并没有给model提供类似功能的框架,我就想来弄点新的东西出来玩玩 :P

继续阅读