Skip to content

Commit 13064ee

Browse files
committed
admin: use BitHandler instead of bitor operator
Fixes #61, #64, and #89 in BitFieldListFilter, with a more efficient implementation.
1 parent 20459fc commit 13064ee

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

bitfield/admin.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
from django.contrib.admin import FieldListFilter
77
from django.contrib.admin.options import IncorrectLookupParameters
88

9-
from bitfield import Bit
10-
from bitfield.compat import bitor
9+
from bitfield import Bit, BitHandler
1110

1211

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

2625
def queryset(self, request, queryset):
27-
filter = dict((p, bitor(F(p), v)) for p, v in six.iteritems(self.used_parameters))
26+
filter_kwargs = dict(
27+
(p, BitHandler(v, ()))
28+
for p, v in six.iteritems(self.used_parameters)
29+
)
30+
if not filter_kwargs:
31+
return queryset
2832
try:
29-
return queryset.filter(**filter)
33+
return queryset.filter(**filter_kwargs)
3034
except ValidationError as e:
3135
raise IncorrectLookupParameters(e)
3236

0 commit comments

Comments
 (0)