#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… Я обещаю, что вы найдете это очень полезным!