gpt4 book ai didi

Django 模型查询集过滤器作为函数

转载 作者:行者123 更新时间:2023-12-04 15:27:01 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义函数,我可以将其放置在查询集“链”中,该函数将对查询集应用过滤器。与普通的 Django 查询集过滤器一样,它会将查询集放在它的左侧并将结果查询集传递到右侧。

在将我的自定义函数添加到查询集链之前:

models.MyModel.objects.all()
models.MyModel.objects.some_manger_function()
models.MyModel.objects.some_manger_function().count()
models.MyModel.objects.some_manger_function().filter(title='something')

将我的自定义函数添加到查询集链后:
models.MyModel.objects.all().my_custom_filter()
models.MyModel.objects.some_manger_function().my_custom_filter()
models.MyModel.objects.some_manger_function().my_custom_filter().count()
models.MyModel.objects.some_manger_function().my_custom_filter()\
.filter(title='something')

我不确定如何构建我的函数来做到这一点。它周围是否需要某种装饰器?
???? def my_custom_filter(???):
???? return qs.filter(id__gte=10)

有谁知道实现这一目标的好方法?

以下可能有效,但我希望有一些更像 Django 的东西。
def my_custom_filter(qs):
return qs.filter(id__gte=1)

my_custom_filter(models.MyModel.objects.all()).count()

非常感谢任何建议。

谢谢,


更新 :我正在尝试找出 Ignacio 解决方案的细节。我没有对 QuerySet 覆盖做太多事情,所以我正在拼凑我能找到的东西......
class MyQuerySet(QuerySet):

def filter(self, *args, **kwargs):
return super(self.__class__, self).filter(*args, **kwargs).\
filter(id__gt=5)


class MyManager(models.Manager):

def testqs(self):
return MyQuerySet(self.model)

但是,我认为这不是我期望的方式。有什么建议?
>>> models.MyModel.objects.testqs().filter()

更新 2 :
这篇文章被证明是有用的。
http://zmsmith.com/2010/04/using-custom-django-querysets/

最佳答案

您需要自己编写 QuerySet添加了方法的子类,然后 use that class in the manager .

关于Django 模型查询集过滤器作为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com