]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
REST: Use ModelMultipleChoiceField for other fields
authorStephen Finucane <stephen@that.guru>
Wed, 11 Apr 2018 16:13:37 +0000 (17:13 +0100)
committerDaniel Axtens <dja@axtens.net>
Wed, 9 May 2018 16:22:18 +0000 (02:22 +1000)
There's benefit to being able to do stuff like select multiple patches.
Let's do that.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Signed-off-by: Daniel Axtens <dja@axtens.net>
patchwork/api/filters.py

index afef10f4921383c1e5ad19e8d8d81defb26c6d12..4d8d504d14f656e70d6e30038a4f17ccaba54608 100644 (file)
@@ -41,6 +41,9 @@ from patchwork.models import State
 class ModelMultipleChoiceField(BaseMultipleChoiceField):
 
     def _get_filter(self, value):
+        if not self.alternate_lookup:
+            return 'pk', value
+
         try:
             return 'pk', int(value)
         except ValueError:
@@ -88,14 +91,14 @@ class ModelMultipleChoiceField(BaseMultipleChoiceField):
         return qs
 
 
-class ProjectChoiceField(ModelMultipleChoiceField):
+class BaseField(ModelMultipleChoiceField):
 
-    alternate_lookup = 'linkname__iexact'
+    alternate_lookup = None
 
 
-class ProjectFilter(ModelMultipleChoiceFilter):
+class BaseFilter(ModelMultipleChoiceFilter):
 
-    field_class = ProjectChoiceField
+    field_class = BaseField
 
 
 class PersonChoiceField(ModelMultipleChoiceField):
@@ -108,6 +111,16 @@ class PersonFilter(ModelMultipleChoiceFilter):
     field_class = PersonChoiceField
 
 
+class ProjectChoiceField(ModelMultipleChoiceField):
+
+    alternate_lookup = 'linkname__iexact'
+
+
+class ProjectFilter(ModelMultipleChoiceFilter):
+
+    field_class = ProjectChoiceField
+
+
 class StateChoiceField(ModelMultipleChoiceField):
 
     def _get_filter(self, value):
@@ -154,6 +167,7 @@ class SeriesFilterSet(TimestampMixin, FilterSet):
 class CoverLetterFilterSet(TimestampMixin, FilterSet):
 
     project = ProjectFilter(queryset=Project.objects.all())
+    series = BaseFilter(queryset=Project.objects.all())
     submitter = PersonFilter(queryset=Person.objects.all())
 
     class Meta:
@@ -164,6 +178,7 @@ class CoverLetterFilterSet(TimestampMixin, FilterSet):
 class PatchFilterSet(TimestampMixin, FilterSet):
 
     project = ProjectFilter(queryset=Project.objects.all())
+    series = BaseFilter(queryset=Series.objects.all())
     submitter = PersonFilter(queryset=Person.objects.all())
     delegate = UserFilter(queryset=User.objects.all())
     state = StateFilter(queryset=State.objects.all())
@@ -186,6 +201,9 @@ class CheckFilterSet(TimestampMixin, FilterSet):
 class EventFilterSet(TimestampMixin, FilterSet):
 
     project = ProjectFilter(queryset=Project.objects.all())
+    series = BaseFilter(queryset=Series.objects.all())
+    patch = BaseFilter(queryset=Patch.objects.all())
+    cover = BaseFilter(queryset=CoverLetter.objects.all())
 
     class Meta:
         model = Event