46 lines
1.4 KiB
Python
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 = {
|
|
}
|