将字段添加到Django查询集

将字段添加到Django查询集,django,model,django-queryset,Django,Model,Django Queryset,我正在做一个小项目,有一个现有的数据库,里面充满了数据。每天我们运行一个任务来获取大量记录并通过电子邮件发送结果。对于我们通过电子邮件发送的其中一个值,我们需要对现有字段执行计算(字符串替换)。我们现在使用模型方法来实现这一点。但要做到这一点,我们需要迭代queryset中的所有对象 在运行查询时,如何向queryset添加/扩展计算字段?请注意,这不是模型中的现有字段,我们必须对现有字段执行一些替换。我可以为此使用自定义模型管理器吗?如果是,你有没有一个例子 模型方法: def get_app

我正在做一个小项目,有一个现有的数据库,里面充满了数据。每天我们运行一个任务来获取大量记录并通过电子邮件发送结果。对于我们通过电子邮件发送的其中一个值,我们需要对现有字段执行计算(字符串替换)。我们现在使用模型方法来实现这一点。但要做到这一点,我们需要迭代queryset中的所有对象

在运行查询时,如何向queryset添加/扩展计算字段?请注意,这不是模型中的现有字段,我们必须对现有字段执行一些替换。我可以为此使用自定义模型管理器吗?如果是,你有没有一个例子

模型方法:

def get_application_dir(self):
    trails = {
        'xxx': '/abc/123',
        'yyy': '/xyz/789',
    }

    app = self.application
    file = self.filename

    if app in trails:
        traillen = len(trails[app])
        if file[-traillen:] == trails[app]:
            return file[:-traillen]

    return file
视图中的用法:

if files:
    result['i'] = []
    for f in files:
        a = {
           'application_name': f.application_name,
           'directory': f.get_application_dir()
           }
        result['i'].append(a)
因此,我不想通过从ORM获取值/字段来执行上面的循环。这可能吗?也许通过创建一个自定义模型管理器,并扩展queryset


提前感谢。

如果不能在数据库级别执行此操作,您将在任何情况下迭代查询集。你不迭代它来构建邮件正文吗?嗨@Selcuk,谢谢你的快速回复。不,我不是。但我所做的,是把它放到一个(价值)列表中。我可以通过修改模型的管理器来扩展查询集吗?你可以发布代码的相关部分和预期结果吗?我发布了相关的代码片段@塞尔柱