summaryrefslogtreecommitdiff
path: root/patchwork/forms.py
diff options
context:
space:
mode:
authorStephen Finucane <stephen@that.guru>2016-11-19 14:02:30 +0000
committerStephen Finucane <stephen@that.guru>2016-12-18 22:42:22 +0000
commit513b13677e44c6e6cdb58dab0282ca56db6c0311 (patch)
treeb2ce2392f13dc068f7e21f0d8da8ca8ac1a1b2ed /patchwork/forms.py
parentd4dba8c1ad4ddc668af52f691974f8343b95d86d (diff)
downloadpatchwork-513b13677e44c6e6cdb58dab0282ca56db6c0311.tar
patchwork-513b13677e44c6e6cdb58dab0282ca56db6c0311.tar.gz
forms: Remove duplication
DelegateField and OptionalDelegateField were basically duplicates of other fields. Make use of parameters and remove them. Signed-off-by: Stephen Finucane <stephen@that.guru>
Diffstat (limited to 'patchwork/forms.py')
-rw-r--r--patchwork/forms.py58
1 files changed, 16 insertions, 42 deletions
diff --git a/patchwork/forms.py b/patchwork/forms.py
index b8865b6..b14094d 100644
--- a/patchwork/forms.py
+++ b/patchwork/forms.py
@@ -98,28 +98,27 @@ class DeleteBundleForm(forms.Form):
bundle_id = forms.IntegerField(widget=forms.HiddenInput)
-class DelegateField(forms.ModelChoiceField):
+def _get_delegate_qs(project, instance=None):
+ if instance and not project:
+ project = instance.project
- 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)
+ if not project:
+ raise ValueError('Expected a project')
+
+ q = Q(profile__in=UserProfile.objects
+ .filter(maintainer_projects=project)
+ .values('pk').query)
+ if instance and instance.delegate:
+ q = q | Q(username=instance.delegate)
+ return User.objects.complex_filter(q)
class PatchForm(forms.ModelForm):
def __init__(self, instance=None, project=None, *args, **kwargs):
- if (not project) and instance:
- project = instance.project
- if not project:
- raise Exception("meep")
super(PatchForm, self).__init__(instance=instance, *args, **kwargs)
- self.fields['delegate'] = DelegateField(project, instance,
- required=False)
+ self.fields['delegate'] = forms.ModelChoiceField(
+ queryset=_get_delegate_qs(project, instance), required=False)
class Meta:
model = Patch
@@ -133,31 +132,6 @@ class UserProfileForm(forms.ModelForm):
fields = ['items_per_page']
-class OptionalDelegateField(DelegateField):
- no_change_choice = ('*', 'no change')
- to_field_name = None
-
- def __init__(self, *args, **kwargs):
- super(OptionalDelegateField, self).__init__(
- initial=self.no_change_choice[0], *args, **kwargs)
-
- def _get_choices(self):
- choices = list(
- super(OptionalDelegateField, self)._get_choices())
- choices.append(self.no_change_choice)
- return choices
-
- choices = property(_get_choices, forms.ChoiceField._set_choices)
-
- def is_no_change(self, value):
- return value == self.no_change_choice[0]
-
- def clean(self, value):
- if value == self.no_change_choice[0]:
- return value
- return super(OptionalDelegateField, self).clean(value)
-
-
class OptionalModelChoiceField(forms.ModelChoiceField):
no_change_choice = ('*', 'no change')
to_field_name = None
@@ -226,8 +200,8 @@ class MultiplePatchForm(forms.Form):
def __init__(self, project, *args, **kwargs):
super(MultiplePatchForm, self).__init__(*args, **kwargs)
- self.fields['delegate'] = OptionalDelegateField(project=project,
- required=False)
+ self.fields['delegate'] = OptionalModelChoiceField(
+ queryset=_get_delegate_qs(project=project), required=False)
def save(self, instance, commit=True):
opts = instance.__class__._meta