在Django,如果我有一个模型类,例如

from django.db import models

class Transaction(models.Model):
    ...

然后,如果我想要向模型添加方法,例如存储相当复杂的筛选器,我可以添加自定义模型管理器,例如

class TransactionManager(models.Manager):

    def reasonably_complex_filter(self):
        return self.get_query_set().filter(...)


class Transaction(models.Model):
    objects = TransactionManager()

然后我可以做:

>>> Transaction.objects.reasonably_complex_filter()

有没有什么方法可以添加可以链接到模型查询集末尾的自定义方法?

也就是说,添加自定义方法的方式使我可以这样做:

>>> Transaction.objects.filter(...).reasonably_complex_filter()

推荐答案

你需要在最终得到的QuerySet个方法中添加方法.因此,您需要创建并使用一个QuerySet子类,该子类包含您在任何地方定义的方法,无论您想要这个功能.

我找到了这本教程,它解释了如何做到这一点,以及为什么您可能想要:

https://web.archive.org/web/20160329131857/http://adam.gomaa.us/blog/2009/feb/16/subclassing-django-querysets/index.html

Django相关问答推荐

Django Form初始值不在呈现上起作用

Django OneToOneFieldto抽象对象

没有与给定查询匹配的监视列表

DjangoAdmin与外部数据库的模型无法保存或过滤

UpdateView 不会对 from 属性进行数据绑定

如何在 Django REST Framework API 响应中使用多标签过滤器?

在 django 中使用自定义 url 转换器传递 url 参数

有谁知道是否可以将您的 Django Heroku 应用程序放到 App Store/Google Play 上?

查询 django 模型以找到当月最好的公司销售

如何在 Django 中创建一个独特的 slug

为 Django 模型生成非顺序 ID/PK

删除所有实例后,Django 模型实例主键不会重置为 1

通过 django shell 保存图像/文件

Matplotlib - Tcl_AsyncDelete:异步处理程序被错误的线程删除?

模拟 Django 查询集以测试采用查询集的函数

如何在 Django 中触发 500 错误?

在 PyPy 下运行 Django 的缺点?

在 Django shell 启动时自动导入模型

Django:根据自定义函数过滤查询

判断列表 django 模板中是否存在