django - 在 django 中将三个模型相乘并在视图中得到结果
问题描述
我的模型:
class VisData(models.Model):
visdata_id = models.AutoField(primary_key=True,blank=True)
user_name = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL,blank=True)
title = models.CharField(max_length=200, null=True,blank=True)
buy_sell = models.CharField(max_length=1, null=True,blank=True)
date = models.DateField(auto_now_add=False,null=True,editable=True,blank=True)
hour = models.TimeField(auto_now=False, auto_now_add=False,null=True,editable=True,blank=True)
shares_number = models.DecimalField(decimal_places=0,default=0,max_digits=999,null=True,blank=True)
course = models.DecimalField(decimal_places=2,default=0,max_digits=999,null=True,blank=True)
fare = models.DecimalField(decimal_places=2,default=0,max_digits=999,null=True,blank=True)
def __str__(self):
return self.title
我想分配:
total_value = (shares_number * (course - fare)) and just print it in terminal
我的看法:
def summaryPage(request):
visdata = VisData.objects.all()
#print(visdata)
context = {}
return render(request, 'smth/homepage.html', context)
我找到了一些接近的答案,但我无法理解解决方案,也无法在我的代码中使用它们。
解决方案
您可能需要的称为聚合:
from django.db.models import F, Sum
def summaryPage(request):
aggregated_data = VisData.objects.annotate(
intermid_result=F('course') - F('fare')
).annotate(
record_total=F('shares_number') * F('intermid_result')
).aggregate(
total=SUM('record_total')
)
result = aggregated_data['total']
print(result)
...
此查询将使用值注释每条记录,record_total = shares_number * (course - fare)
然后计算record_total
所有记录的总和。
还要尽量避免在 Python 中使用驼峰式函数名。有关详细信息,请参见此处。
推荐阅读
- c# - Potential False Positive warning in VS? "DF0108: Activity function named '{myfunction}' doesn't have an input"
- boost - 在 boost 共享内存中创建动态二维数组
- angular - 如何使用 Vanilla JavaScript 从 Angular 11 Form 中的选定单选按钮中获取值
- azure-active-directory - Microsoft Graph API 无法写入 ExtensionAttributes
- flutter - 颤振驱动程序:在屏幕上找不到元素(文本)
- reactjs - 排除格式
- node.js - 快递退货 3 次回复
- google-sheets - 仅获取修订 ID 列表
- android - 如何正确显示带有变量的字符串资源
- python - Python XML 迭代