我是Django的新手。我试图显示总和。
投资组合模型:
# Create your models here.
class Portfolio(models.Model):
name = models.CharField(max_length=255)
user = models.ForeignKey(User, related_name='portfolios', on_delete=models.PROTECT)
def get_absolute_url(self):
return reverse('portfolio:detail',kwargs={'pk': self.pk})
def __str__(self):
return self.name
class PortfolioItem(models.Model):
portfolio = models.ForeignKey(Portfolio, related_name='items', on_delete=models.CASCADE)
trade = models.ForeignKey(Trade, on_delete=models.CASCADE)
贸易模式
# Create your models here.
class Trade(models.Model):
quantity = models.FloatField()
open_price = models.FloatField()
commision = models.FloatField(null=True,blank=True)
exchange_rate_usdsek = models.FloatField(null=True,blank=True)
stock = models.ForeignKey(Stock, on_delete=models.CASCADE)
#portfolio = models.ForeignKey(Portfolio, 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
@property
def profit(self):
#(sold - buy) / buy
buy = self.open_price * self.quantity
now = self.stock.current_price * self.quantity
return ((now - buy ) / buy)*100
def net_gain(self):
#(sold - buy) / buy
buy = self.open_price * self.quantity
now = self.stock.current_price * self.quantity
return now - buy
投资组合index.html
{% extends 'user/layout.html' %}
{% block body %}
{% for portfolio in all_portfolios %}
<h3>{{portfolio.name}}</h3>
<p>Total: {{portfolio.total_amount}}</p>
<table class="table">
<thead>
<tr>
<th>Stock</th>
<th>Amount</th>
<th>Open Price</th>
<th>Net P/L %</th>
<th>Net P/L</th>
</tr>
</thead>
{% for item in portfolio.items.all %}
<tr>
<td>{{item.trade.stock.name}}</td>
<td>{{item.trade.quantity}}</td>
<td>€{{item.trade.open_price}}</td>
<td>€{{item.trade.stock.current_price}}</td>
<td>{{item.trade.profit|floatformat:"0"}}%</td>
<td>€{{item.trade.net_gain|floatformat:"2"}}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
{% endblock %}
投资组合视图
class IndexView(generic.ListView):
template_name = 'portfolio/index.html'
context_object_name = 'all_portfolios'
#
def get_queryset(self):
#portfolio = Portfolio.objects.all().prefetch_related('items').annotate(num_items=Count('items'))
portfolio = Portfolio.objects.all().prefetch_related('items').annotate(total_amount = Count('items__trade'))
return portfolio
#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上展示的是一组不同的股票。 所以有2行(Monero和Etherum)。每个都有支付总数和总价。我还想计算每枚硬币的净P / L.
我试过.annotate(total_amount = Count('items__trade__openm_price'))
计算总价但不起作用。我该怎么做?
另外,我是否需要PortfolioItem或者我可以在每笔交易中使用投资组合密钥吗?
答案 0 :(得分:0)
您可以将项目组合在一起,例如:
Portfolio.objects.values('name').annotate(total_amount=Sum('trade__open_price'))
这将通过投资组合名称获得开盘价的总和。这是documentation。