【问题标题】:Django calculate 2 values from modelDjango从模型计算2个值
【发布时间】:2018-07-20 03:27:10
【问题描述】:

我对 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 中计算吗? 另外我该怎么做?我四处搜索,发现了一些关于过滤器的东西,但我不确定这是否是正确的方法

【问题讨论】:

    标签: django python-3.x django-2.0


    【解决方案1】:

    最简单的方法是将此计算定义为模型上的属性:

    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 代码中使用。

    【讨论】:

    • 啊,太好了。这个属性没有存储在数据库中吧?
    • 不,每次访问都会计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多