我的 Django 应用程序中有以下模型。
class Revenue(models.Model):
from_a = models.IntegerField()
from_b = models.IntegerField()
def get_total(self):
return self.from_a + self.from_b
Run Code Online (Sandbox Code Playgroud)
现在我正在使用 检索数据Revenue.objects.filter(from_a__gt = 10).values('from_a', 'from_b')。
从上面的查询集中我获取了值,现在我想get_total在对象上调用函数。我没有找到调用该函数的方法。
有没有一种方法可以检索仅我需要使用的数据values并且也可以调用member_functions该对象?
Revenue.objects.filter(from_a__gt = 10)如果我的模型有数百列,则不应该是解决方案。
从上面的查询集中我获取了值,现在我想
get_total在对象上调用函数。我没有找到调用该函数的方法。
好吧,你得到了 a QuerySet(即此时尚未评估),所以是s的集合Revenue。您不能直接调用该集合上的函数。但是您可以迭代查询集,并在单个对象上调用该函数。例如,我们可以列出一个列表:
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10)]Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以仅使用值检索我需要的数据,并且还可以调用
member_functions该对象?
是的,您可以.only(..)在查询中使用该元素来限制加载的列数:
[r.get_total() for r in Revenue.objects.filter(from_a__gt = 10).only('from_a', 'from_b')]Run Code Online (Sandbox Code Playgroud)
这将构造Revenue对象,但我们只会加载指定的列。在这种情况下,我们将仅加载from_a和from_b,如果您稍后需要其他字段,这些字段将通过额外的查询加载。
然而,如果member_functions 中的逻辑很简单,您最好使用注释:然后在数据库中处理这些注释,从而允许过滤。然而,这并不总是可能的:Python 允许计算非常复杂的事物,从而产生巨大的等效 SQL 表达式。此外,大多数数据库不允许联系网络服务和文件系统,因此某些功能基本上不可能在注释中进行翻译。
| 归档时间: |
|
| 查看次数: |
4616 次 |
| 最近记录: |