Skip to content

Commit 57bfaba

Browse files
committed
allow filter by reverse FK
1 parent 05979e5 commit 57bfaba

File tree

1 file changed

+7
-17
lines changed

1 file changed

+7
-17
lines changed

admin_numeric_filter/admin.py

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,13 @@ class SingleNumericFilter(admin.FieldListFilter):
2828

2929
def __init__(self, field, request, params, model, model_admin, field_path):
3030
super().__init__(field, request, params, model, model_admin, field_path)
31-
3231
if not isinstance(field, (DecimalField, IntegerField, FloatField, AutoField)):
3332
raise TypeError('Class {} is not supported for {}.'.format(type(self.field), self.__class__.__name__))
3433

3534
self.request = request
36-
3735
if self.parameter_name is None:
38-
self.parameter_name = self.field.name
3936

37+
self.parameter_name = self.field_path
4038
if self.parameter_name in params:
4139
value = params.pop(self.parameter_name)
4240
self.used_parameters[self.parameter_name] = value
@@ -66,22 +64,20 @@ class RangeNumericFilter(admin.FieldListFilter):
6664

6765
def __init__(self, field, request, params, model, model_admin, field_path):
6866
super().__init__(field, request, params, model, model_admin, field_path)
69-
7067
if not isinstance(field, (DecimalField, IntegerField, FloatField, AutoField)):
7168
raise TypeError('Class {} is not supported for {}.'.format(type(self.field), self.__class__.__name__))
7269

7370
self.request = request
74-
7571
if self.parameter_name is None:
76-
self.parameter_name = self.field.name
72+
self.parameter_name = self.field_path
7773

7874
if self.parameter_name + '_from' in params:
79-
value = params.pop(self.parameter_name + '_from')
80-
self.used_parameters[self.parameter_name + '_from'] = value
75+
value = params.pop(self.field_path + '_from')
76+
self.used_parameters[self.field_path + '_from'] = value
8177

8278
if self.parameter_name + '_to' in params:
83-
value = params.pop(self.parameter_name + '_to')
84-
self.used_parameters[self.parameter_name + '_to'] = value
79+
value = params.pop(self.field_path + '_to')
80+
self.used_parameters[self.field_path + '_to'] = value
8581

8682
def queryset(self, request, queryset):
8783
filters = {}
@@ -128,16 +124,10 @@ def __init__(self, field, request, params, model, model_admin, field_path):
128124
super().__init__(field, request, params, model, model_admin, field_path)
129125

130126
self.field = field
131-
parent_model, reverse_path = reverse_field_path(model, field_path)
132-
133-
if model == parent_model:
134-
self.q = model_admin.get_queryset(request)
135-
else:
136-
self.q = parent_model._default_manager.all()
127+
self.q = model_admin.get_queryset(request)
137128

138129
def choices(self, changelist):
139130
total = self.q.all().count()
140-
141131
min_value = self.q.all().aggregate(
142132
min=Min(self.parameter_name)
143133
).get('min', 0)

0 commit comments

Comments
 (0)