Как подсчитать количество акций в портфеле по кредитным/дебетовым транзакциям в Django?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как подсчитать количество акций в портфеле по кредитным/дебетовым транзакциям в Django?

Сообщение Anonymous »

Извините, если это ужасная запись, поскольку это мой первый вопрос.
Я пытаюсь подсчитать акции, оставшиеся в портфеле пользователя Django после того, как в нем могло быть совершено множество транзакций с акциями. это портфолио. Ниже приводится краткое изложение моих моделей и моих попыток. В настоящее время я фильтрую портфели, в которых есть акции, но подсчитываю все транзакции в этом портфеле.
модели

Код: Выделить всё

Class Portfolio(models.Model):
name = models.CharField(...)
owner = models.ForeignKey(User, ...)
equity = models.ManytoManyField(Equity...., through="PortfolioEquity")

Class Equity(models.Model):
symbol = models.CharField(...)
name = models.CharField(...)

Class PortfolioEquity(models.Model):
BUY = "BUY"
SELL = "SELL"
TRANSACTION_CHOICES = {
BUY: "Buy",
SELL: "Sell",
}
portfolio = models.ForeignKey(Portfolio, ...)
equity = models.ForeignKey(Equity, ...)
transaction = models.CharField(max_length=4, choices=TRANSACTION_CHOICES)
amount = models.DecimalField(max_digits=8, decimal_places=2)
shares = models.DecimalField(max_digits=8, decimal_places=3)
date = models.DateField()

просмотры

Код: Выделить всё

def get(self, request):
positive_equities = PortfolioEquity.objects.values('equity').annotate(
tot_shares=Sum(Case(
When(transaction="BUY", then=F('shares')),
When(transaction="SELL", then=-F('shares')),
default=Value(0),
output_field=DecimalField()
))).filter(shares__gt=0)

portfolios = Portfolio.objects.annotate(equity_count=Subquery(
positive_equities.filter(portfolio=OuterRef('pk'))
.values('portfolio')
.annotate(count=Count('equity'))
.values('count')
)).filter(equity_count__gt=0)

return self.render_to_response({'portfolios': portfolios})

html

Код: Выделить всё

{% for portfolio in portfolios %}

Owner: {{ portfolio.owner.get_full_name }}
Equit{{ portfolio.equity_count|pluralize:'y,ies' }}: {{ portfolio.equity_count }}

{% endfor %}

Сделки:
Покупка; 5x ААПЛ; 1 января 2024 г.; 300,00 долларов США
Продать; 5x ААПЛ; 15 января 2024 г.; 350 долларов США
Купить; 1x АА; 20 января 2024 г.; $200,00
Выход должен быть «Капитал: 1», где я получаю «Акции: 3», что означает общую сумму транзакций, а не количество акций, оставшихся в портфеле.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ransaction
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»