扩展ModelForm字段

有时候我们想在ModelForm之上增加几个字定义的字段,或者期望在一个页面上让用户同时填写两个表(model)的内容——比如某些1:1关系中,希望用户同时输入两个模型数据,后台同步保存。通过分析modelform的代码,其实可以非常轻松的达到我们的目标。

简单地说,这涉及到字段定义、数据初始化和数据保存三个层面的内容。

  • 字段定义与普通的form的字段定义一样,新增的自定义控件也会自动加入到form的数据验证规则,这没什么可说的;
  • 数据初始化的部分,只需要在form的"初始化函数"中通过initial赋值即可:
 def __init__(self,data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=':',
                 empty_permitted=False, instance=None):
        try:
            initial = initial or {}
            if not instance is None:
                family = instance.family
                initial.update({
 
                    'revenue':family.revenue,
                    'revenue_source':family.revenue_source,

                    'family_situation':family.situation
                    
                })
        except Family.DoesNotExist:
            pass
        super(StudentForm,self).__init__(data,files,auto_id,prefix,
            initial,error_class,label_suffix,
            empty_permitted,instance)
  • 数据保存,更是简单,直接重写form的save方法即可,当然别忘了调用父类的save
posted @ 2012-10-15 09:22  雨吁的嘘  阅读(325)  评论(0)    收藏  举报