[2/7] REST: Simplify ModelMultiChoiceField

Message ID 20180411161338.420-3-stephen@that.guru
State New
Headers show
Series
  • Add support for multiple filters
Related show

Commit Message

Stephen Finucane April 11, 2018, 4:13 p.m.
We're actually going to remove this shortly but the new technique works
for both.

Signed-off-by: Stephen Finucane <stephen@that.guru>
---
 patchwork/api/filters.py | 23 +++++++----------------
 1 file changed, 7 insertions(+), 16 deletions(-)

Patch

diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py
index 25956e98..030f9af3 100644
--- a/patchwork/api/filters.py
+++ b/patchwork/api/filters.py
@@ -46,7 +46,10 @@  class ModelMultiChoiceField(ModelChoiceField):
         if value in self.empty_values:
             return None
 
-        filters = self._get_filters(value)
+        try:
+            filters = {'pk': int(value)}
+        except ValueError:
+            filters = {self.alternate_lookup: value}
 
         try:
             value = self.queryset.get(**filters)
@@ -58,11 +61,7 @@  class ModelMultiChoiceField(ModelChoiceField):
 
 class ProjectChoiceField(ModelMultiChoiceField):
 
-    def _get_filters(self, value):
-        try:
-            return {'pk': int(value)}
-        except ValueError:
-            return {'linkname__iexact': value}
+    alternate_lookup = 'linkname__iexact'
 
 
 class ProjectFilter(ModelChoiceFilter):
@@ -72,11 +71,7 @@  class ProjectFilter(ModelChoiceFilter):
 
 class PersonChoiceField(ModelMultiChoiceField):
 
-    def _get_filters(self, value):
-        try:
-            return {'pk': int(value)}
-        except ValueError:
-            return {'email__iexact': value}
+    alternate_lookup = 'email__iexact'
 
 
 class PersonFilter(ModelChoiceFilter):
@@ -111,11 +106,7 @@  class StateFilter(ModelChoiceFilter):
 
 class UserChoiceField(ModelMultiChoiceField):
 
-    def _get_filters(self, value):
-        try:
-            return {'pk': int(value)}
-        except ValueError:
-            return {'username__iexact': value}
+    alternate_lookup = 'username__iexact'
 
 
 class UserFilter(ModelChoiceFilter):