Дополнительная фильтрация QuerySet при переходе от одного URL к другому

Я изучаю Python Django. Я пытаюсь создать приложение для отслеживания расходов. Я записываю транзакцию расходов и прикрепляю ее к категории и подкатегории. Например, категория - Путешествие, подкатегория - Отель.

Затем я регистрирую транзакцию на определенную дату с указанием категории/подкатегории. Моя модель выглядит следующим образом.

class Categories(models.Model):
    category_text = models.CharField(max_length=50)
    def __str__(self):
        return self.category_text

class SubCategories(models.Model):
    category = models.ForeignKey(Categories, related_name="category", on_delete=models.CASCADE)
    subcategory_text = models.CharField(max_length=50)
    def __str__(self):
        return self.subcategory_text

class Transaction(models.Model):
    card_source = models.ForeignKey(CardSource, on_delete=models.CASCADE)
    subcategory = models.ForeignKey(SubCategories, related_name="subcategory", on_delete=models.CASCADE)
    amount = models.DecimalField(max_digits=9, decimal_places=2)
    description = models.CharField(max_length=100)
    transaction_date = models.DateField('Date')
    def __str__(self):
        return self.description + ' on ' + str(self.transaction_date) + ' via ' + str(self.card_source)

Мой вид index.html показывает всю сумму всех расходов по категориям за последние 30 дней.

# /expenses/<x>days/
def last_xdays(request, num_of_days):
    last_xdays_date = date.today() - timedelta(days=num_of_days)
    transaction_list = Transaction.objects.filter(transaction_date__gte=last_xdays_date).filter(
        transaction_date__lte=date.today())
    if not transaction_list:
        raise Http404("No transactions found.")
    category_list = Categories.objects.annotate(category_sum=Sum('category__subcategory__amount', filter=Q(
        category__subcategory__id__in=transaction_list))).filter(category_sum__gt=0)
    return render(request, 'expenses/index.html',
                  {'category_list': category_list, 'transaction_list': transaction_list})

Требование: Когда я нажимаю на категорию, она должна переходить на url [/expenses/30days/Travel][1], показывая сумму всех расходов по подкатегории в этой категории.

Шаблон:

{% for category in category_list %}
    <tr>
        <td><a href="{% url 'expenses:category' category.id %}">{{ category.category_text }}</a></td>
        <td>{{ category.category_sum }}</td>
    {% endfor %}

Например, когда я нажимаю на категорию "Путешествия", она должна показать мне расходы, суммированные на уровне подкатегорий, таких как "Отель", "Авиабилеты", но только за последние 30 дней. Проблема заключается в том, как узнать, что исходный вид уже отфильтрован за 30 дней? Поэтому, когда я фильтрую расходы на уровне подкатегорий, я рассматриваю только расходы, сделанные за последние 30 дней

У меня есть еще фильтр в верхней части страницы, например, фильтр расходов за последние 90 дней. В этом случае представление будет суммировать все расходы по категориям, сделанные за последние 90 дней. Опять же, когда я нажимаю на категорию, мне нужно получить все расходы для этой категории за последние 90 дней и показать их суммированными на уровне подкатегорий.

Проблема в том, что когда я нажимаю на категорию, как узнать существующий фильтр по дате, т.е. если просмотр фильтруется за последние 30 дней или 60 дней или 90 дней и т.д.? Также, как перейти на url типа [https:///expenses/60days/Travel]?

Допустим, у вас есть URL-адрес следующего вида:

/expenses/60days/

Вы можете поместить это в ваши HTML ссылки:

<a href="{{ sub_category }}">

Появляется

<a href="travel">

Это то же самое, что и

<a href="/expenses/60days/travel/"

Без префиксной прямой косой черты ссылка становится относительной, и щелчок по ней просто добавляет 'travel' к текущему URL.

Вернуться на верх