Django 从模型中计算 2 个值
Django calculate 2 values from model
我是 Django 的新手。我正在使用 Django 2。
我的模特:
# Create your models here.
class Trade(models.Model):
quantity = models.IntegerField()
open_price = models.FloatField()
commision = models.FloatField()
exchange_rate_usdsek = models.FloatField()
stock = models.ForeignKey(Stock, on_delete=models.CASCADE)
user = models.ForeignKey(User, related_name='trades', on_delete=models.PROTECT)
open_date = models.DateTimeField(auto_now_add=True, null=True)
def get_absolute_url(self):
return reverse('trade:detail',kwargs={'pk': self.pk})
def __str__(self):
return self.stock.name
我的看法
class IndexView(generic.ListView):
template_name = 'trade/index.html'
context_object_name = 'all_trades'
#
def get_queryset(self):
return Trade.objects.all()
#return Order.objects.all().prefetch_related('items')
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
return context
index.html
<h3>All stocks</h3>
<table class="table">
<thead>
<tr>
<th>Stock</th>
<th>Amount</th>
<th>Open Price</th>
<th>Commision</th>
<th>USD/SEK</th>
<th>Total sek</th>
</tr>
</thead>
{% for trade in all_trades %}
<tr>
<td>{{trade.stock.name}}</td>
<td>{{trade.quantity}}</td>
<td>{{trade.open_price}} USD</td>
<td>{{trade.commision}} SEK</td>
<td>{{trade.exchange_rate_usdsek}}</td>
<td>{{open_price * quantity * exchange_rate_usdsek}}</td>
</tr>
{% endfor %}
</table>
现在在我的 index.html 上,我想计算并显示一个值。
我这样计算:
total_sek = open_price * quantity * exchange_rate_usdsek
我必须在 views.py 或 index.html 中计算吗?
另外我该怎么做?我四处搜索并找到了一些关于过滤器的信息,但我不确定这是否是正确的方法
最简单的方法是将此计算定义为模型上的 属性:
class Trade(models.Model):
# ...
@property
def total_sek(self):
return self.open_price * self.quantity * self.exchange_rate_usdsek
此时您可以简单地
<td>{{ trade.total_sek }}</td>
在模板中,
和 trade.total_sek
中的 Python 代码也需要。
我是 Django 的新手。我正在使用 Django 2。
我的模特:
# Create your models here.
class Trade(models.Model):
quantity = models.IntegerField()
open_price = models.FloatField()
commision = models.FloatField()
exchange_rate_usdsek = models.FloatField()
stock = models.ForeignKey(Stock, on_delete=models.CASCADE)
user = models.ForeignKey(User, related_name='trades', on_delete=models.PROTECT)
open_date = models.DateTimeField(auto_now_add=True, null=True)
def get_absolute_url(self):
return reverse('trade:detail',kwargs={'pk': self.pk})
def __str__(self):
return self.stock.name
我的看法
class IndexView(generic.ListView):
template_name = 'trade/index.html'
context_object_name = 'all_trades'
#
def get_queryset(self):
return Trade.objects.all()
#return Order.objects.all().prefetch_related('items')
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
return context
index.html
<h3>All stocks</h3>
<table class="table">
<thead>
<tr>
<th>Stock</th>
<th>Amount</th>
<th>Open Price</th>
<th>Commision</th>
<th>USD/SEK</th>
<th>Total sek</th>
</tr>
</thead>
{% for trade in all_trades %}
<tr>
<td>{{trade.stock.name}}</td>
<td>{{trade.quantity}}</td>
<td>{{trade.open_price}} USD</td>
<td>{{trade.commision}} SEK</td>
<td>{{trade.exchange_rate_usdsek}}</td>
<td>{{open_price * quantity * exchange_rate_usdsek}}</td>
</tr>
{% endfor %}
</table>
现在在我的 index.html 上,我想计算并显示一个值。 我这样计算:
total_sek = open_price * quantity * exchange_rate_usdsek
我必须在 views.py 或 index.html 中计算吗? 另外我该怎么做?我四处搜索并找到了一些关于过滤器的信息,但我不确定这是否是正确的方法
最简单的方法是将此计算定义为模型上的 属性:
class Trade(models.Model):
# ...
@property
def total_sek(self):
return self.open_price * self.quantity * self.exchange_rate_usdsek
此时您可以简单地
<td>{{ trade.total_sek }}</td>
在模板中,
和 trade.total_sek
中的 Python 代码也需要。