python /Django : Adding custom model methods?

标签 python django methods model

使用举例

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 方法,它只能在类的实例上调用,而不能在类本身上调用。换句话说,一旦您有一个名为 mymodelinstancemodel 实例,您就可以执行 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/

相关文章:

python - 是否可以重载 Python 赋值?

python - 无法显示带有点击入口点的 Python 二进制 PEX 版本

python - BERT 中 NER 的正确格式化数据应该是什么样子?

python - 如何为 Django 1.4 网站实时显示脚本结果?

带有内置函数的 Python inspect.getargspec

javascript - 始终返回数组中的最后一个元素

python - 模型字段 "verbose name"的使用

python - 对于 Python 3 中的随机列表,如何让列表接受小写字母代替 Hangman 中的大写字母?

mysql - 如何通过 SSL 连接将 Django 连接到 MySQL 数据库?

python - 如何获取模型的名称或 Django 对象的内容类型?