[PATCH 2/7] REST: Simplify ModelMultiChoiceField

Stephen Finucane stephen at that.guru
Thu Apr 12 02:13:33 AEST 2018


We're actually going to remove this shortly but the new technique works
for both.

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

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):
-- 
2.14.3



More information about the Patchwork mailing list