我有一个Django模型说:
class MyOperation(models.Model):
name = models.CharField(max_length=100)
def my_method(self):
pass
我希望能够从不同的Django应用程序中为这个类添加一个新方法。
我尝试从另一个名为custom.py的应用模块执行此操作:
from operations.models import MyOperation
def op_custom(test):
print "testing custom methods"
MyOperation.op_custom = op_custom
然而,这似乎不起作用,在运行时该方法不存在。
这是从不同的django应用程序修改类定义的方法吗?有没有更好的方法呢?
由于
答案 0 :(得分:4)
The Right Way™是通过mixin来实现的:
class MyMixIn(object):
def op_custom(self):
print("foo")
class MyOperation(models.Model, MyMixIn):
def op_normal(self):
print("bar")
与其他方法中的猴子修补相比,这有几个优点: