钩入django野外任务

时间:2012-04-03 16:38:47

标签: python django orm django-forms

当创建“vanilla”python类时,如果想要在赋值给属性时执行代码,则通常的模式是创建一个“受保护”(lead-underscore)属性来保存数据,并使用{{1创建getter和setter。

现在,如果我想用Django模型做到这一点,那将是没有吸引力的,尤其是因为我必须搜索该属性的下划线版本。

在Django中为字段分配运行代码的推荐方法是什么?

我无法发现这样做的信号;我能看到的唯一其他方法是使用可以注册其他getter / setter处理程序的自定义Field。

2 个答案:

答案 0 :(得分:1)

你根本无法在非自定义字段上执行此操作,因为没有实际的“字段”:它是一个简单的属性,后面没有类。

您需要定义自定义字段类并覆盖to_python - 不要忘记将元类设置为SubfieldBase

答案 1 :(得分:1)

看起来像脏地是你想要的。您无法在设置值的同时进行拦截,但可以在保存之前挂钩。 http://code.activestate.com/pypm/django-dirtyfields/

或者,您应该使用set方法设置@properties。当然,这需要您使用getter和setter复制实际的django.db.models.fields字段。