扩展ModelForm字段

本文详细介绍了如何在ModelForm基础上增加自定义字段,以及如何在同一个页面上同时处理两个模型的数据,并确保后台同步保存。通过实例分析,展示了数据初始化和保存的具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们想在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

转载于:https://www.cnblogs.com/Ankh/archive/2012/10/15/2723760.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值