Skip to content

Commit

Permalink
filters cross-filtering nicely........i think. more testing.
Browse files Browse the repository at this point in the history
issue #78
  • Loading branch information
jwhaney committed Mar 10, 2020
1 parent d5998b1 commit 04a4bf4
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 21 deletions.
47 changes: 29 additions & 18 deletions src/data_hub/lore/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@

from django.contrib import admin

from .filters import (CollectionAgencyNameFilter, CollectionCountyFilter,
CountyDropdownFilter, CollectionPublicFilter)
from .filters import (
CollectionAgencyNameFilter,
CollectionCountyFilter,
CountyDropdownFilter,
CollectionPublicFilter,
CollectionScannedFilter,
ProductCleanStatusFilter
)
from .forms import CollectionForm, ProductForm
from .models import (Agency, Collection, County, CountyRelate, FrameSize,
LineIndex, MicroficheIndex, PhotoIndex, Product,
Expand Down Expand Up @@ -88,30 +94,35 @@ class CollectionAdmin(admin.ModelAdmin):
'fields': ('remarks',)
})
)
inlines = [PhotoIndexInlineAdmin, LineIndexInlineAdmin,
MicroficheIndexInlineAdmin, ProductInlineAdmin,
ScannedPhotoIndexLinkInlineAdmin]
inlines = [
PhotoIndexInlineAdmin,
LineIndexInlineAdmin,
MicroficheIndexInlineAdmin,
ProductInlineAdmin,
ScannedPhotoIndexLinkInlineAdmin
]
list_display = (
'collection', 'id', 'agency', 'from_date', 'to_date', 'county_names', 'public'
)
ordering = ('from_date', 'agency__name')
search_fields = ('collection', 'id', 'from_date', 'to_date')
# custom filters from filters.py for cross-filtering functionality between related tables & such
list_filter = (
CollectionPublicFilter,
'fully_scanned',
'Products__clean_status',
CollectionAgencyNameFilter,
CollectionCountyFilter
)
CollectionPublicFilter,
CollectionScannedFilter,
ProductCleanStatusFilter,
CollectionAgencyNameFilter,
CollectionCountyFilter
)
readonly_fields=('qr_code_url',)
actions = [
export_collection,
export_product,
export_photo_index,
export_scanned_photo_index_link,
export_county,
export_line_index,
export_microfiche_index
export_collection,
export_product,
export_photo_index,
export_scanned_photo_index_link,
export_county,
export_line_index,
export_microfiche_index
]

def county_names(self, collection):
Expand Down
59 changes: 56 additions & 3 deletions src/data_hub/lore/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,53 @@ class CollectionPublicFilter(admin.SimpleListFilter):
parameter_name = 'public'

def lookups(self, request, model_admin):
public_collections = Collection.objects.values_list('public', 'public')
return (public_collections)
selections = (
(True, 'Yes'),
(False, 'No'),
)
return (selections)

def queryset(self, request, queryset):
if self.value():
return queryset.filter(public=self.value())
if self.value() == False:
return queryset.filter(public=self.value())


class CollectionScannedFilter(admin.SimpleListFilter):
title = 'Fully Scanned'
parameter_name = 'fully_scanned'

def lookups(self, request, model_admin):
selections = (
(True, 'Yes'),
(False, 'No'),
)
return (selections)

def queryset(self, request, queryset):
if self.value():
return queryset.filter(fully_scanned=self.value())
if self.value() == False:
return queryset.filter(fully_scanned=self.value())


class ProductCleanStatusFilter(admin.SimpleListFilter):
title = 'Clean Status'
parameter_name = 'clean_status'

def lookups(self, request, model_admin):
selections = (
(True, 'Yes'),
(False, 'No'),
)
return (selections)

def queryset(self, request, queryset):
if self.value():
return queryset.filter(Products__clean_status=self.value())
if self.value() == False:
return queryset.filter(Products__clean_status=self.value())


class CollectionAgencyNameFilter(admin.SimpleListFilter):
Expand All @@ -57,6 +98,7 @@ class CollectionCountyFilter(admin.SimpleListFilter):

def lookups(self, request, model_admin):
agency = request.GET.getlist('agency')

if agency:
ag = Agency.objects.get(name=agency[0])
county_relates = (
Expand All @@ -67,15 +109,26 @@ def lookups(self, request, model_admin):
.values_list("county__id", "county__name")
)
return (
(c[0], c[1]) for c in sorted(set(county_relates), key=lambda x: x[1]))
(c[0], c[1]) for c in sorted(set(county_relates), key=lambda x: x[1])
)
counties = County.objects.all().order_by('name')
return ((county.id, county.name) for county in counties)

def queryset(self, request, queryset):
agency = request.GET.getlist('agency')
public = request.GET.getlist('public')
scan = request.GET.getlist('fully_scanned')
clean = request.GET.getlist('clean_status')

if self.value():
county_collections = CountyRelate.objects.filter(
county_id=uuid.UUID(self.value())).values_list("collection")
if public:
county_collections = Collection.objects.filter(public=public[0]).filter(id__in=county_collections)
if scan:
county_collections = Collection.objects.filter(fully_scanned=scan[0]).filter(id__in=county_collections)
if clean:
county_collections = Collection.objects.filter(Products__clean_status=clean[0]).filter(id__in=county_collections)
if agency:
ag = Agency.objects.get(name=agency[0])
results = (Collection.objects.filter(id__in=county_collections)
Expand Down

0 comments on commit 04a4bf4

Please sign in to comment.