Coverage for events/filters.py: 73%
18 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-06-01 11:04 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-06-01 11:04 -0600
1import django_filters
2from django_filters import rest_framework as filters
3from memberships.models import Membership
4from .models import Event, Ticket
7class EventFilter(filters.FilterSet):
8 """
9 Filter for Event
10 """
12 membership = django_filters.ModelChoiceFilter(method="membership_filter", queryset=Membership.objects.all())
13 purchased = django_filters.ModelChoiceFilter(method="purchased_filter", queryset=Membership.objects.all())
15 class Meta:
16 model = Event
17 fields = {
18 "date": ["exact", "gte", "gt", "lte", "lt"],
19 "hour": ["exact", "gte", "gt", "lte", "lt"],
20 "is_active": ["exact"],
21 }
23 def membership_filter(self, queryset, name, value):
24 membership_type = value.type_of
25 membership_segment = value.segment
26 membership_organization = value.organization
28 return queryset.filter(
29 allowed_memberships=membership_type,
30 allowed_segments=membership_segment,
31 organization=membership_organization,
32 )
34 def purchased_filter(self, queryset, name, value):
35 events = value.products.instance_of(Ticket).values_list("ticket__event", flat=True).distinct()
36 return queryset.filter(random_slug__in=events)