在django中将三个模型相乘并在视图中获取结果

Multiplying three models in django and getting the result in views

我的模特:

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)

我找到了一些接近的答案,但我无法理解解决方案,也无法在我的代码中使用它们。

您可能需要调用 aggregation:

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 中使用驼峰式函数名称。有关详细信息,请参阅 here