Python 钩住django字段分配
在创建“普通”python类时,如果希望在赋值给属性时执行代码,通常的模式是创建一个“受保护”(前导下划线)属性来保存数据,并使用Python 钩住django字段分配,python,django,orm,django-forms,Python,Django,Orm,Django Forms,在创建“普通”python类时,如果希望在赋值给属性时执行代码,通常的模式是创建一个“受保护”(前导下划线)属性来保存数据,并使用属性来创建getter和setter 现在,如果我想用Django模型来实现这一点,那就没有吸引力了,尤其是因为我必须搜索属性的下划线版本 在Django中运行字段分配代码的推荐方法是什么? 我找不到这样做的信号;我能看到的唯一其他方法是使用一个自定义字段来注册额外的getter/setter处理程序。在非自定义字段上不能这样做,因为没有实际的“字段”:它是一个简单的
属性
来创建getter和setter
现在,如果我想用Django模型来实现这一点,那就没有吸引力了,尤其是因为我必须搜索属性的下划线版本
在Django中运行字段分配代码的推荐方法是什么?
我找不到这样做的信号;我能看到的唯一其他方法是使用一个自定义字段来注册额外的getter/setter处理程序。在非自定义字段上不能这样做,因为没有实际的“字段”:它是一个简单的属性,后面没有类
您需要定义一个自定义字段类,并将
重写为_python
——别忘了将元类设置为。看起来dirtyfields就是您想要的。不能在设置值的同时截取,但可以在保存前挂接
或者,您应该使用set方法设置@properties
。当然,这需要您使用getter和setter复制实际的django.db.models.fields
字段