wallet/apps/wallet/filters.py
Sayyid Hamid Mahdavi c925100fd6 some cleanups
2025-10-23 17:25:15 +03:30

46 lines
1.4 KiB
Python

import django_filters
from django.db import models
from django.db.models import Q
from .constans import TypeChoices
from .models import Transaction, Wallet
class CategoryUUIDFilter(django_filters.BaseInFilter, django_filters.UUIDFilter):
pass
class UserTransactionCategoryFilter(django_filters.BaseInFilter, django_filters.UUIDFilter):
def filter(self, queryset, value):
request = self.parent.request
user = request.user
return queryset.filter(
Q(payer_wallet__owner_uuid=user.pk,
payer_wallet__owner_type=TypeChoices.USER,
payer_wallet__category_id__in=value,
) |
Q(payee_wallet__owner_uuid=user.pk,
payee_wallet__owner_type=TypeChoices.USER,
payee_wallet__category_id__in=value,
))
class UserTransactionFilter(django_filters.FilterSet):
payer = django_filters.UUIDFilter(field_name='payer_wallet__owner_uuid', lookup_expr='iexact')
payee = django_filters.UUIDFilter(field_name='payee_wallet__owner_uuid', lookup_expr='iexact')
wallets = UserTransactionCategoryFilter(field_name='payee_wallet__category', required=True, lookup_expr='in')
class Meta:
model = Transaction
fields = {
}
class WalletFilter(django_filters.FilterSet):
wallets = CategoryUUIDFilter(field_name='category', required=True, lookup_expr='in')
class Meta:
model = Wallet
fields = {
}