annotate(revenue=Sum(‘revenue’))如何用形参代替revenue
时间: 2024-03-01 19:51:45 浏览: 114
在 Django 的 annotate() 方法中,聚合函数的参数通常是一个字符串,在该字符串中指定模型中的字段名称。如果你想要使用一个形参来代替这个字符串,可以使用 Python 的字典解包操作符 `**`。
例如,假设你有一个 Book 模型,其中有一个 `price` 字段表示图书的价格,你想要使用一个形参 `field_name` 来代替字符串 `'price'`,你可以这样写:
```python
from django.db.models import Sum
def get_revenue_by_field(field_name):
return Book.objects.aggregate(revenue=Sum(field_name))['revenue']
```
在上面的代码中,我们使用了 aggregate() 方法来计算 `field_name` 对应字段的总和,并将结果存储在 `revenue` 变量中。然后我们通过字典解包操作符 `**` 将 `revenue` 变量传递给 annotate() 方法的参数。
这样,你就可以调用 `get_revenue_by_field()` 方法来获取不同字段的总和了。例如:
```python
>>> get_revenue_by_field('price')
221.0
>>> get_revenue_by_field('discounted_price')
198.9
>>> get_revenue_by_field('wholesale_price')
185.0
```
注意,在使用字典解包操作符时,你需要确保传递给 annotate() 方法的参数是一个字典,其中键名为聚合函数的别名,键值为聚合函数的表达式。
阅读全文