Coverage for events/filters.py: 73%

18 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1import django_filters 

2from django_filters import rest_framework as filters 

3from memberships.models import Membership 

4from .models import Event, Ticket 

5 

6 

7class EventFilter(filters.FilterSet): 

8 """ 

9 Filter for Event 

10 """ 

11 

12 membership = django_filters.ModelChoiceFilter(method="membership_filter", queryset=Membership.objects.all()) 

13 purchased = django_filters.ModelChoiceFilter(method="purchased_filter", queryset=Membership.objects.all()) 

14 

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 } 

22 

23 def membership_filter(self, queryset, name, value): 

24 membership_type = value.type_of 

25 membership_segment = value.segment 

26 membership_organization = value.organization 

27 

28 return queryset.filter( 

29 allowed_memberships=membership_type, 

30 allowed_segments=membership_segment, 

31 organization=membership_organization, 

32 ) 

33 

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)