gpt4 book ai didi

python - 在 Django 中,您可以向查询集添加方法吗?

转载 作者:IT老高 更新时间:2023-10-28 22:13:59 26 4
gpt4 key购买 nike

在 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()

最佳答案

从 django 1.7 开始,to use a query set as a manager 的能力已添加:

class PersonQuerySet(models.QuerySet):
def authors(self):
return self.filter(role='A')

def editors(self):
return self.filter(role='E')

class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
role = models.CharField(max_length=1, choices=(('A', _('Author')),
('E', _('Editor'))))
people = PersonQuerySet.as_manager()

结果如下:

Person.people.authors(last_name='Dahl')

此外,可以添加custom lookups也添加了。

关于python - 在 Django 中,您可以向查询集添加方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4576622/

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