Skip to content

Commit

Permalink
admin: use BitHandler instead of bitor operator
Browse files Browse the repository at this point in the history
Fixes disqus#61, disqus#64, and disqus#89 in BitFieldListFilter,
with a more efficient implementation.
  • Loading branch information
ortholeviator committed Apr 6, 2020
1 parent 20459fc commit 13064ee
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions bitfield/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
from django.contrib.admin import FieldListFilter
from django.contrib.admin.options import IncorrectLookupParameters

from bitfield import Bit
from bitfield.compat import bitor
from bitfield import Bit, BitHandler


class BitFieldListFilter(FieldListFilter):
Expand All @@ -24,9 +23,14 @@ def __init__(self, field, request, params, model, model_admin, field_path):
field, request, params, model, model_admin, field_path)

def queryset(self, request, queryset):
filter = dict((p, bitor(F(p), v)) for p, v in six.iteritems(self.used_parameters))
filter_kwargs = dict(
(p, BitHandler(v, ()))
for p, v in six.iteritems(self.used_parameters)
)
if not filter_kwargs:
return queryset
try:
return queryset.filter(**filter)
return queryset.filter(**filter_kwargs)
except ValidationError as e:
raise IncorrectLookupParameters(e)

Expand Down

0 comments on commit 13064ee

Please sign in to comment.