使用举例
class model(models.Model)
....
def my_custom_method(self, *args, **kwargs):
#do something
当我尝试在 pre_save、save、post_save 等期间调用此方法时,Python 引发了 TypeError;未绑定(bind)方法。
如何添加可以以与 model.objects.get() 等相同的方式执行的自定义模型方法?
编辑:尝试使用 super(model, self).my_custom_method(*args, **kwargs)
但在那种情况下 Python 表示模型没有属性 my_custom_method
最佳答案
你如何调用这个方法?您已经定义了一个instance 方法,它只能在类的实例上调用,而不能在类本身上调用。换句话说,一旦您有一个名为 mymodelinstance
的 model
实例,您就可以执行 mymodelinstance.my_custom_method()
。
如果你想在类上调用它,你需要定义一个类方法。您可以使用方法上的 @classmethod
装饰器来完成此操作。请注意,按照惯例,类方法的第一个参数是 cls
,而不是 self
。参见 the Python documentation有关类方法的详细信息。
但是,如果您真正想要做的是添加一个执行查询集级操作的方法,例如 objects.filter()
或 objects.get()
,那么最好的办法是定义一个自定义管理器并在其中添加您的方法。然后您就可以执行 model.objects.my_custom_method()
。再次查看 Django documentation关于经理。
关于 python /Django : Adding custom model methods?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3921619/