gpt4 book ai didi

django - 使用 Django ORM 值并调用成员函数

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

我的 Django 应用程序中有以下模型。

class Revenue(models.Model):
from_a = models.IntegerField()
from_b = models.IntegerField()

def get_total(self):
return self.from_a + self.from_b

现在我正在使用 Revenue.objects.filter(from_a__gt = 10).values('from_a', 'from_b') 检索数据.

从上面的查询集中我得到了值,现在我想调用 get_total作用于对象。
我没有找到调用该函数的方法。

有没有办法只使用 values 来检索我需要的数据?也可以调用 member_functions那些对象?
Revenue.objects.filter(from_a__gt = 10)如果我的模型有 100 列,则不应该是解决方案。

最佳答案

From the above queryset I am getting values, now I want to call get_total function on objects. I didn't found a way to call that function.



那么你得到一个 QuerySet (即在这一点上没有评估),所以 Revenue 的集合s。您不能直接调用该集合上的函数。但是您可以遍历查询集,并在个别对象上调用该函数。例如,我们可以列出一个列表:
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10)]

Is there a way to retrieve the data only I needed using values and also can call member_functions of that objects?



是的,您可以使用 .only(..)查询中的元素,以限制加载的列数:
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10).only('from_a', 'from_b')]

这将构造 Revenue对象,但我们只会加载指定的列。在这种情况下,我们将只加载 from_afrom_b ,如果您以后需要其他字段,这些字段将加载额外的查询。

但是,如果 member_function 中的逻辑s 很简单,您最好使用注释:然后在数据库中处理这些注释,从而允许过滤。然而,这并不总是可能的:Python 允许计算非常复杂的东西,这会导致巨大的等效 SQL 表达式。此外,大多数数据库不允许联系 Web 服务和文件系统,因此某些功能根本无法在注释中翻译。

关于django - 使用 Django ORM 值并调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51285113/

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