]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
forms: Allow the delegate field to keep its current value
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Sat, 28 Nov 2015 12:14:40 +0000 (10:14 -0200)
committerStephen Finucane <stephen.finucane@intel.com>
Tue, 19 Jan 2016 21:22:25 +0000 (21:22 +0000)
When a patch is delegated at parse time (either through the
X-Patchwork-Hint mail header or through delegation rules), the delegate
might not be in the list of project maintainers.

Add the current delegate to the list of acceptable values for the
delegate field to allow the current value to be kept when editing the
patch.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Acked-by: Stephen Finucane <stephen.finucane@intel.com>
patchwork/forms.py

index c4eb8c520362c886bb265277797ca6e061e04e64..217e743077f54d94cbed6226b92014c0f94566bb 100644 (file)
@@ -20,6 +20,7 @@
 from __future__ import absolute_import
 
 from django.contrib.auth.models import User
+from django.db.models.query_utils import Q
 from django import forms
 
 from patchwork.models import Patch, State, Bundle, UserProfile
@@ -98,10 +99,13 @@ class DeleteBundleForm(forms.Form):
 
 class DelegateField(forms.ModelChoiceField):
 
-    def __init__(self, project, *args, **kwargs):
-        queryset = User.objects.filter(profile__in=UserProfile.objects
-                                       .filter(maintainer_projects=project)
-                                       .values('pk').query)
+    def __init__(self, project, instance=None, *args, **kwargs):
+        q = Q(profile__in=UserProfile.objects
+              .filter(maintainer_projects=project)
+              .values('pk').query)
+        if instance and instance.delegate:
+            q = q | Q(username=instance.delegate)
+        queryset = User.objects.complex_filter(q)
         super(DelegateField, self).__init__(queryset, *args, **kwargs)
 
 
@@ -113,7 +117,8 @@ class PatchForm(forms.ModelForm):
         if not project:
             raise Exception("meep")
         super(PatchForm, self).__init__(instance=instance, *args, **kwargs)
-        self.fields['delegate'] = DelegateField(project, required=False)
+        self.fields['delegate'] = DelegateField(project, instance,
+                                                required=False)
 
     class Meta:
         model = Patch