Как получить сводку затрат за год для определенной категории в DetailView, Django?

#python #django

#python #django

Вопрос:

У меня есть таблица с категориями расходов, и когда я нажимаю на определенную категорию, она перенаправляет меня на эту страницу DetailView. Затем я хочу показать сводку затрат за год для выбранной категории, чтобы она выглядела аналогично тому, что я уже получил (сводка за год-месяц, но не для определенной категории). Как я могу этого добиться?

Это то, что я получил на данный момент и застрял:

 def category_summary():
    summary_by_year_month = Expense.objects.annotate(
    month=TruncMonth('date')).values('date').annotate(
    amount=Sum('amount')).order_by()

return summary_by_year_month
  

MODELS.PY

 class Category(models.Model):
    name = models.CharField(max_length=50, unique=True)

    def __str__(self):
        return f'{self.name}'


class Expense(models.Model):
    class Meta:
         ordering = ('date', '-pk')

    category = models.ForeignKey(Category, null=True, blank=True, 
    on_delete=models.CASCADE)
    name = models.CharField(max_length=50)
    amount = models.DecimalField(max_digits=8, decimal_places=2)
    date = models.DateField(default=datetime.date.today, db_index=True)

    def __str__(self):
        return f'{self.date} {self.name} {self.amount}'
  

Самая запутанная часть этой проблемы для меня заключается в том, как я могу получить эту информацию только для выбранной категории и показать ее пользователю в DetailView? Заранее благодарю вас за любую помощь.

Комментарии:

1. Почему вы не можете просто filter по выбранной категории, прежде чем делать аннотации?

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

3. Фильтры имеют решающее значение для правильного использования Django ORM 🙂 Я предлагаю вам прочитать документы здесь: docs.djangoproject.com/en/3.1/topics/db/queries . Также смотрите руководство по Django Girls по этому вопросу: tutorial.djangogirls.org/en/django_orm — рекомендуется использовать весь учебник.

4. Но смогу ли я заставить это работать автоматически? Я имею в виду, когда я нажму, например, категорию «спорт» в таблице, я увижу только затраты за год только для этого в DetailView, верно?

5. Если вы поместите это в свой контекст для представления, а затем используете эти данные в форме / шаблоне, тогда да. Основываясь на вопросах, которые вы задаете, я настоятельно рекомендую вам просмотреть весь учебник Django Girls… Я обещаю, что вы найдете это очень полезным!