#html #python-3.x #django #django-class-based-views #django-aggregation
#HTML #python-3.x #django #django-class-based-views #django-агрегация
Вопрос:
В настоящее время впервые использую агрегацию, пытаясь получить сумму всех «транзакций» и отобразить их на моей HTML-странице. Я использую общие представления на основе классов, в настоящее время в моей функции отображаются транзакции, созданные пользователем. Я могу отобразить баланс, если я верну его из функции, хотя моя функция «отображать только созданные пользователем транзакции» должна иметь приоритет. Я пытаюсь отобразить свой баланс в HTML, вот моя функция в views.py
class TranListView (ListView):
model = transactions
def get_queryset(self): #gets only if user matches
return self.model.objects.filter(user_id=self.request.user)
#def get_context_data(self):
# cBalance = transactions.objects.all().aggregate(cBalance=Sum('amount'))
# return cBalance
Шаблон списка:
<ul>
<a href="{% url 'landing' %}"> Homepage</a><br><br>
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'taction-create' %}">Create New</a>
<h5> Transactions: </h5>
<li> {{ cBalance }}</li>
{% for object in object_list %}
<li>{{ object.tname }}</li>
<li>{{ object.amount }}</li>
<li>{{ object.date }}</li>
<li>{{ object.recipient }}</li>
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'taction-update' object.id %}">Update</a>
<a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'taction-delete' object.id %}">Delete</a>
<hr/>
{% empty %}
<li>No objects yet.</li>
{% endfor %}
</ul>
Если кто-нибудь может мне помочь, я был бы очень признателен
Редактировать: получил работу с этим
class TranListView (ListView):
model = transactions
def get_queryset(self): #gets only if user matches
return self.model.objects.filter(user_id=self.request.user)
def get_context_data(self, *args, **kwargs):
context = super(TranListView, self).get_context_data(*args, **kwargs)
context['cBalance'] = transactions.objects.filter(user_id=self.request.user).aggregate(Sum('amount'))['amount__sum'] or 0.00
return context
Комментарии:
1. Похоже, мне все еще нужно округлить число, и в итоге я все еще вызывал cBalance в html, поэтому не уверен, нужно ли мне использовать ‘amount__sum’
Ответ №1:
Может быть, вы могли бы попробовать это :
from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse
class TranListView(ListView):
model = transactions
def get_queryset(self):
return self.model.objects.filter(user_id=self.request.user)
cBalance = transactions.objects.all().aggregate(cBalance=Sum('amount'))
template = loader.get_template('list.html') # put the name of your html file
context = {
'cBalance': cBalance,
}
return HttpResponse(template.render(context, request))
Комментарии:
1. Для этого здесь мне понадобится другая функция, чтобы использовать этот второй возврат?