Ignore:
Timestamp:
Feb 9, 2013, 1:53:21 AM (13 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, stable, stage
Children:
62f73df
Parents:
ea8e8b6
git-author:
Alex Dehnert <adehnert@…> (02/09/13 01:53:21)
git-committer:
Alex Dehnert <adehnert@…> (02/09/13 01:53:21)
Message:

Proof-of-concept reporting filters (ASA-#193)

Add proof-of-concept support for extensible filtering of the reporting page,
beyond just the fields on the Group object. At the moment, this is just a few
space-related filters, but in the future this might include groups missing
membership confirmations, groups whose presidents aren't students, groups who
have filled out the FYSM, etc..

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asadb/groups/views.py

    r8d3b651 rd7557b8  
    10791079
    10801080class ReportingForm(form_utils.forms.BetterForm):
     1081    special_filters = forms.fields.MultipleChoiceField(
     1082        choices=[],
     1083        widget=forms.SelectMultiple(attrs={'size': 10}),
     1084        validators=[groups.models.filter_registry.validate_filter_slug],
     1085        required=False,
     1086    )
     1087
    10811088    basic_fields_choices = groups.models.Group.reporting_fields()
    10821089    basic_fields_labels = dict(basic_fields_choices) # name -> verbose_name
     
    11171124            ('filter', {
    11181125                'legend': 'Filter Groups',
    1119                 'fields': ['name', 'abbreviation', 'activity_category', 'group_class', 'group_status', 'group_funding', ],
     1126                'fields': [
     1127                    'name', 'abbreviation',
     1128                    'activity_category', 'group_class', 'group_status', 'group_funding',
     1129                    'special_filters',
     1130                ],
    11201131            }),
    11211132            ('fields', {
     
    11281139            }),
    11291140        ]
     1141
     1142    def __init__(self, *args, **kwargs):
     1143        super(ReportingForm, self).__init__(*args, **kwargs)
     1144
     1145        registry = groups.models.filter_registry
     1146        self.fields['special_filters'].choices = registry.get_choices()
    11301147
    11311148class GroupReportingFilter(GroupFilter):
     
    11901207        # Set up query
    11911208        qs = groups_filterset.qs
     1209        for fltr_slug in form.cleaned_data['special_filters']:
     1210            fltr = groups.models.filter_registry.get(fltr_slug)
     1211            qs = qs.filter(pk__in=fltr.queryset())
     1212
    11921213        # Prefetch foreign keys
    11931214        prefetch_fields = groups.models.Group.reporting_prefetch()
Note: See TracChangeset for help on using the changeset viewer.