Как я могу получить сумму для клиента в текущем месяце в представлении django
Я работаю над проектом Django, в котором я хочу получить общее (суммарное) пополнение счета для каждого клиента в текущем месяце года в виде списка. Я пока не могу разобраться с этим, так как в запросе функции не используется ID, чтобы использовать метод .get() для фильтрации по id клиента. Ниже приведены моя модель и код представления:
class Customer(models.Model):
surname = models.CharField(max_length=10, null=True)
othernames = models.CharField(max_length=20, null=True)
account_number = models.CharField(max_length=10, null=True)
address = models.CharField(max_length=50, null=True)
phone = models.CharField(max_length=11, null=True)
date = models.DateTimeField(auto_now_add=True, null=True)
#Get the url path of the view
def get_absolute_url(self):
return reverse('customer_create', args=[self.id])
#Making Sure Django Display the name of our Models as it is without Pluralizing
class Meta:
verbose_name_plural = 'Customer'
#
def __str__(self):
return f'{self.surname} {self.othernames} - {self.account_number}'
class Deposit(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
acct = models.CharField(max_length=6, null=True)
staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
deposit_amount = models.PositiveIntegerField(null=True)
date = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return reverse('create_account', args=[self.id])
def __str__(self):
return f'{self.customer} Deposited {self.deposit_amount} by {self.staff.username}'
Код просмотров:
def create_account(request):
current_date = datetime.now().date()
customers = Customer.objects.all()
act = customers.account_number
deposited_this_month = Deposit.objects.filter(customer__account_number=act, date__year=current_date.year, date__month=current_date.month).aggregate(deposited_this_month=Sum('deposit_amount')).get('deposited_this_month') or 0
У меня возникает ошибка, которая говорит Объект QuerySet не имеет атрибута 'account_number'. Буду признателен за лучшее решение этой проблемы. Пожалуйста, поймите, что каждый импорт модуля, контекст и отрисовка шаблона выполняются без проблем. Спасибо.
Чтобы получить сумму депозита для каждого клиента за данный месяц и год, необходимо сделать следующее:
from django.db.models.functions import ExtractYear, ExtractMonth
from django.db.models import Sum
Deposit.objects.filter(
date__year=current_date.year,
date__month=current_date.month
).annotate(
month= ExtractMonth('date'),
year= ExtractYear('date'),
).values(
'customer__account_number',
'year',
'month',
).annotate(
total_deposit=Sum('deposit_amount')
)