使用Django ORM值并调用成员函数 [英] Use Django ORM values and call member functions
本文介绍了使用Django ORM值并调用成员函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的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列,则不应该是解决方案。
推荐答案
从上面的查询集中我得到了值,现在我想对对象调用get_total
函数。我没有找到调用该函数的方法。
您将获得QuerySet
(即在这一点上未求值),因此集合Revenue
。您不能直接在该集合上调用该函数。但您可以迭代查询集,并对单独的对象调用该函数。例如,我们可以用:列出一个列表
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10)]
有没有办法只使用值检索我需要的数据,并且还可以调用该对象的
member_functions
?
可以,您可以在查询中使用.only(..)
元素,以限制加载的列数:
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10).only('from_a', 'from_b')]
这将构造Revenue
个对象,但我们只加载指定的列。在这种情况下,我们将只加载from_a
和from_b
,如果您以后需要其他字段,这些字段将加载额外的查询。
如果member_function
中的逻辑很简单,您最好使用注释:然后在数据库中处理这些注释,从而允许进行过滤。然而,这并不总是可能的:Python允许计算非常复杂的事情,这将导致一个巨大的等价SQL表达式。此外,大多数数据库不允许联系Web服务和文件系统,因此某些函数根本不可能在注释中转换。
这篇关于使用Django ORM值并调用成员函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文