Умножение трех моделей в 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 * (курс - тариф)) и просто вывести это в терминале

мои взгляды:

def summaryPage(request):
visdata = VisData.objects.all()
#print(visdata)

context = {}
return render(request, 'smth/homepage.html', context)

Я нашел несколько близких ответов, но не смог понять решение и использовать их в своем коде

То, что вам, вероятно, нужно, называется агрегация:

from django.db.models import Sum


def summaryPage(request):
    aggregated_data = VisData.objects.aggregate(
       shares_sum=Sum('shares_number'),
       course_sum=Sum('course'),
       fare_sum=Sum('fare')
    )
    result = aggregated_data['shares_sum'] * (aggregated_data['course'] - aggregated_data['fare'])
    print(result)
    ...

Также старайтесь избегать использования в Python имен функций в верблюжьем регистре. Подробнее см. здесь.

Вернуться на верх