class PostFilter(FilterSet): # Used for Related filter and Filter.method regression tests title = filters.AutoFilter(field_name='title', lookups='__all__') publish_date = filters.AutoFilter(lookups='__all__') is_published = filters.BooleanFilter(method='filter_is_published') author = RelatedFilter(UserFilter, field_name='author', queryset=User.objects.all()) note = RelatedFilter(NoteFilter, field_name='note', queryset=Note.objects.all()) tags = RelatedFilter(TagFilter, field_name='tags', queryset=Tag.objects.all()) class Meta: model = Post fields = [] def filter_is_published(self, queryset, field_name, value): """ `is_published` is based on the actual `publish_date`. If the publish date is null, then the post is not published. This filter method is used to demonstrate annotations. """ # Note: don't modify this without updating test_filtering.AnnotationTests return queryset.annotate_is_published() \ .filter(**{field_name: value})
class PostFilter(FilterSet): # Used for Related filter and Filter.method regression tests title = filters.AllLookupsFilter(field_name='title') publish_date = filters.AllLookupsFilter() is_published = filters.BooleanFilter(field_name='publish_date', method='filter_is_published') note = RelatedFilter(NoteFilter, field_name='note', queryset=Note.objects.all()) tags = RelatedFilter(TagFilter, field_name='tags', queryset=Tag.objects.all()) class Meta: model = Post fields = [] def filter_is_published(self, qs, name, value): """ `is_published` is based on the actual `date_published`. If the publishing date is null, then the post is not published. """ isnull = not value lookup_expr = LOOKUP_SEP.join([name, 'isnull']) return qs.filter(**{lookup_expr: isnull})
class ContractFilter(FilterSet, metaclass=MetaFilterSet): _token_text = ('agency_id', ) _fuzzy_text = ('piid', 'agency_name', 'NAICS', 'PSC', 'point_of_contact', 'vendor_phone') _number = ('id', 'obligated_amount', 'annual_revenue', 'number_of_employees') _date_time = ('date_signed', 'completion_date') status = RelatedFilter(ContractStatusFilter) pricing_type = RelatedFilter(PricingStructureFilter) vendor = RelatedFilter(VendorFilter) vendor_location = RelatedFilter(LocationFilter) place_of_performance = RelatedFilter(PlaceOfPerformanceFilter) psc_naics = CharFilter(field_name='NAICS', method='filter_psc_naics') class Meta: model = contracts.Contract fields = () def filter_psc_naics(self, qs, name, value): naics_code = re.sub(r'[^\d]+$', '', value) psc_codes = list( categories.PSC.objects.filter( naics__root_code=naics_code).distinct().values_list('code', flat=True)) return qs.filter(Q(PSC__in=psc_codes) | Q(NAICS=naics_code))
class KeywordFilter(FilterSet, metaclass=MetaFilterSet): _number = ('id', 'parent__id') _fuzzy_text = ('name', 'parent__name', 'calc', 'sin__code') naics = RelatedFilter(NaicsFilter) psc = RelatedFilter(PscFilter) class Meta: model = categories.Keyword fields = ()
class PageFilter(FilterSet): title = filters.CharFilter(field_name='title') previous_page = RelatedFilter(PostFilter, field_name='previous_page', queryset=Post.objects.all()) two_pages_back = RelatedFilter(PostFilter, field_name='previous_page__previous_page', queryset=Page.objects.all()) class Meta: model = Page fields = []
class PoolFilter(FilterSet, metaclass=MetaFilterSet): _token_text = ('id', 'number') _fuzzy_text = ('name', 'threshold') vehicle = RelatedFilter(VehicleFilter) naics = RelatedFilter(NaicsFilter) psc = RelatedFilter(PscFilter) keywords = RelatedFilter(KeywordFilter) class Meta: model = categories.Pool fields = ()
class VendorBaseFilter(FilterSet, metaclass=MetaFilterSet): _boolean = ('sam_exclusion', ) _token_text = ('cage', 'sam_status') _fuzzy_text = ('name', 'sam_url') _number_text = ('duns', ) _date_time = ('sam_activation_date', 'sam_expiration_date') sam_location = RelatedFilter(LocationFilter) pools = RelatedFilter(PoolMembershipFilter) class Meta: model = vendors.Vendor fields = ()
class PoolMembershipFilter(FilterSet, metaclass=MetaFilterSet): _fuzzy_text = ('piid', ) _date_time = ('expiration_8a_date', 'contract_end_date') _number = ('id', ) pool = RelatedFilter(PoolFilter) setasides = RelatedFilter(SetAsideFilter) zones = RelatedFilter(ZoneFilter) contacts = RelatedFilter(ContactFilter) class Meta: model = vendors.PoolMembership fields = ()
class PoolMembershipFilter(FilterSet, metaclass=MetaFilterSet): _fuzzy_text = ('piid', ) pool = RelatedFilter(PoolFilter) setasides = RelatedFilter(SetAsideFilter) zones = RelatedFilter(ZoneFilter) cms = RelatedFilter(ContractManagerFilter) pms = RelatedFilter(ProjectManagerFilter) class Meta: model = vendors.PoolMembership fields = ()
class AFilter(FilterSet): title = filters.CharFilter(field_name='title') b = RelatedFilter('BFilter', field_name='b', queryset=B.objects.all()) class Meta: model = A fields = []
class CoverFilterWithRelatedMethodFilter(FilterSet): comment = filters.CharFilter(field_name='comment') post = RelatedFilter(PostFilter, field_name='post', queryset=Post.objects.all()) class Meta: model = Cover fields = []
class NoteFilterWithRelatedAllDifferentFilterName(FilterSet): title = filters.CharFilter(field_name='title') writer = RelatedFilter(UserFilterWithAll, field_name='author', queryset=User.objects.all()) class Meta: model = Note fields = []
class BFilter(FilterSet): name = AllLookupsFilter(name='name') c = RelatedFilter(CFilter, name='c') class Meta: model = B fields = []
class AFilter(FilterSet): title = filters.CharFilter(name='title') b = RelatedFilter('tests.testapp.filters.BFilter', name='b') class Meta: model = A fields = []
class BlogFilter(FilterSet): name = AutoFilter(field_name='name', lookups='__all__') post = RelatedFilter('PostFilter', queryset=Post.objects.all()) class Meta: model = Blog fields = []
class NoteFilter(FilterSet): title = AutoFilter(field_name='title', lookups='__all__') author = RelatedFilter(UserFilter, queryset=User.objects.all()) class Meta: model = Note fields = []
class PostFilter(FilterSet): # Used for Related filter and MethodFilter tests note = RelatedFilter(NoteFilterWithRelatedAll, name='note') date_published = filters.AllLookupsFilter() is_published = filters.MethodFilter() class Meta: model = Post def filter_is_published(self, name, qs, value): """ `is_published` is based on the actual `date_published`. If the publishing date is null, then the post is not published. """ # convert value to boolean null = value.lower() != 'true' # The lookup name will end with `is_published`, but could be # preceded by a related lookup path. if LOOKUP_SEP in name: rel, _ = name.rsplit(LOOKUP_SEP, 1) name = LOOKUP_SEP.join([rel, 'date_published__isnull']) else: name = 'date_published__isnull' return qs.filter(**{name: null})
class PersonFilter(FilterSet): name = AllLookupsFilter(name='name') best_friend = RelatedFilter('tests.testapp.filters.PersonFilter', name='best_friend') class Meta: model = Person
class BFilter(FilterSet): name = AllLookupsFilter(field_name='name') c = RelatedFilter('CFilter', field_name='c', queryset=C.objects.all()) class Meta: model = B fields = []
class BlogPostFilter(FilterSet): title = filters.CharFilter(field_name='title') tags = RelatedFilter(TagFilter, field_name='tags', queryset=Tag.objects.all()) class Meta: model = BlogPost fields = []
class CFilter(FilterSet): title = filters.CharFilter(field_name='title') a = RelatedFilter('AFilter', field_name='a', queryset=A.objects.all()) class Meta: model = C fields = []
class PersonFilter(FilterSet): name = AllLookupsFilter(field_name='name') best_friend = RelatedFilter('tests.testapp.filters.PersonFilter', field_name='best_friend', queryset=Person.objects.all()) class Meta: model = Person fields = []
class NoteFilterWithRelated(FilterSet): title = filters.CharFilter(field_name='title') author = RelatedFilter(UserFilter, field_name='author', queryset=User.objects.all()) class Meta: model = Note fields = []
class CFilter(FilterSet): title = filters.CharFilter(name='title') a = RelatedFilter(AFilter, name='a') class Meta: model = C fields = []
class ContractFilter(ContractBaseFilter, metaclass=MetaFilterSet): vendor = RelatedFilter(VendorFilter) psc_naics = CharFilter(field_name='NAICS', method='filter_psc_naics') class Meta: model = contracts.Contract fields = () def filter_psc_naics(self, qs, name, value): naics_code = re.sub(r'[^\d]+$', '', value) try: naics = categories.Naics.objects.get(code=naics_code) sin_codes = list(naics.sin.all().values_list('code', flat=True)) psc_codes = list( categories.PSC.objects.filter( sin__code__in=sin_codes).distinct().values_list('code', flat=True)) return qs.filter(Q(PSC__in=psc_codes) | Q(NAICS=naics_code)) except Exception: pass return qs.filter(NAICS=naics_code)
class CustomerFilter(FilterSet): accounts = RelatedFilter('AccountFilter', field_name='account', queryset=Account.objects.all()) class Meta: model = Customer fields = ['name', 'ssn', 'dob', 'accounts']
class ContractBaseFilter(FilterSet, metaclass=MetaFilterSet): _fuzzy_text = ('piid', 'base_piid', 'NAICS', 'PSC', 'point_of_contact', 'vendor_phone') _number = ('id', 'obligated_amount') _date_time = ('date_signed', 'completion_date') status = RelatedFilter(ContractStatusFilter) pricing_type = RelatedFilter(PricingStructureFilter) agency = RelatedFilter(AgencyFilter) vendor_location = RelatedFilter(LocationFilter) place_of_performance = RelatedFilter(PlaceOfPerformanceFilter) class Meta: model = contracts.Contract fields = ()
class AccountFilter(FilterSet): customer = RelatedFilter('CustomerFilter', to_field_name='ssn', queryset=Customer.objects.all()) class Meta: model = Account fields = ['customer', 'type', 'name']
class NoteFilterWithRelatedDifferentName(FilterSet): author = RelatedFilter(UserFilterWithDifferentName, name='author', queryset=User.objects.all()) class Meta: model = Note fields = []
class NoteFilterWithRelatedAlias(FilterSet): author = RelatedFilter(UserFilterWithAlias, field_name='author', queryset=User.objects.all()) class Meta: model = Note fields = []