#python #django #django-views #django-queryset
Вопрос:
Я пытаюсь создать веб-страницу крипто-портфолио. Моя проблема заключается в следующем. Таблица текущих транзакций при отображении html:
Имя крипто_ | Общая Торговая Стоимость |
---|---|
УСТРОЙСТВО для очистки сточных вод | 150 |
УСТРОЙСТВО для очистки сточных вод | 100 |
ДОЖ | 200 |
ДОЖ | 210 |
Таблица требуемых транзакций:
Имя крипто_ | Общая Торговая Стоимость |
---|---|
УСТРОЙСТВО для очистки сточных вод | 250 |
ДОЖ | 410 |
Я хотел бы выбрать различные значения Crypto_Name и затем суммировать значения в общей торговой стоимости.
models.py:
class Transaction(models.Model):
"""Model representing a trade."""
portfolio = models.ForeignKey('Portfolio',on_delete=models.CASCADE)
coin = models.ForeignKey(Coin,on_delete=models.CASCADE)
number_of_coins = models.DecimalField(max_digits=10, decimal_places=0)
trade_price = models.DecimalField(max_digits=10, decimal_places=2)
date = models.DateField()
def __str__(self):
return str(self.portfolio)
@property
def total_trade_value(self):
return self.trade_price * self.number_of_coins
views.py запрос:
def my_portfolio(request):
filtered_transaction_query_by_user = Transaction.objects.filter(portfolio__user=request.user)
...
То, что я пробовал среди многих вещей:
test = filtered_transaction_query_by_user.order_by().values('coin__name').distinct()
Это дает мне всего два криптографических имени в уродливом формате
{'coin__name': 'Bitcoin'}
{'coin__name': 'Doge'}
но другие столбцы пусты, когда я отображаю их в html.
Я ценю вашу помощь!!! 🙂
ОБНОВЛЕНИЕ: Большое спасибо @HudsonBarroso за ответ:
test = filtered_transaction_query_by_user.values('coin__name').annotate( total = (Sum(trade_price ) * Sum(number_of_coins))).order_by('-total')
Ответ №1:
попробуйте это:
from django.db.models import Sum
test = filtered_transaction_query_by_user.values('coin__name').annotate(
total = (Sum(trade_price ) * Sum(number_of_coins))).order_by('-total')
Комментарии:
1.
.values('coin_name')
измените это на.values('coin__name')
(дополнительное_
, так как это поле связанной модели).2. Спасибо за быстрый ответ @HudsonBarroso, я добавил дополнительный » для «total_trade_value» для работы. К сожалению, это работает для каждого поля модели, но не для значения total_trade_: не удается разрешить ключевое слово «total_trade_value» в поле. Выбор: монета, идентификатор монеты, дата, идентификатор, количество монет, портфель, идентификатор портфеля, торговая цена.Это метод модели. У вас есть какие-нибудь предложения?
3. Попробуйте еще раз: test = filtered_transaction_query_by_user.значения(‘имя монеты__’). аннотировать( итого = (Сумма(trade_price ) * Сумма(number_of_coins))). заказ_би(‘-итого’)
4. Это было решением проблемы. Спасибо вам за помощь @HudsonBarroso . Большой голос!
5. Это здорово, в любое время, когда вам понадобится @Neat1!