You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单__init__方法中如何获取字段的实际值?

解决Django ModelForm初始化时获取更新前字段值的问题

你当前代码里,self.fields['name']拿到的是字段的定义对象(比如CharField实例),不是实际的字段值;而cleaned_data要等表单执行清理逻辑后才会生成,所以在__init__阶段根本不存在这个属性。

正确的做法是利用ModelForm初始化时传入的instance参数——更新操作时,这个参数就是要修改的模型实例,直接从它身上就能获取原始字段值。另外注意你代码里的小错误:ModelForm内部应该是class Meta而非class Model,这是Django的固定写法。

修改后的代码如下:

class Form_Rol(forms.ModelForm):
    class Meta:
        model = My_Model
        fields = "__all__"

    def __init__(self, *args, **kwargs):
        # 先调用父类初始化方法,确保self.instance被正确赋值
        super().__init__(*args, **kwargs)
        # 判断是否为更新操作:instance存在且不是新创建的对象
        if self.instance and not self.instance._state.adding:
            original_name = self.instance.name
            print(original_name)

说明:

  • 调用父类__init__后,self.instance会被赋值为对应的模型实例:创建新对象时是未保存的空实例,更新时是数据库中已存在的实例。
  • self.instance._state.adding为False时,代表这是一个要更新的已有对象,此时self.instance.name就是数据库中存储的原始值。

内容的提问来源于stack exchange,提问作者Daniel Acuña

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:45:12