]> git.ozlabs.org Git - patchwork/blobdiff - apps/patchwork/forms.py
forms.MultiplePatchForm: remove no-change fields on clean()
[patchwork] / apps / patchwork / forms.py
index bc746bd11c580deb3031dbaa1925bf36920d29de..2c137e3c027618e12ff223755272f4451813689e 100644 (file)
@@ -80,6 +80,11 @@ class CreateBundleForm(forms.ModelForm):
                     % name)
         return name
 
+class DeleteBundleForm(forms.Form):
+    name = 'deletebundleform'
+    form_name = forms.CharField(initial = name, widget = forms.HiddenInput)
+    bundle_id = forms.IntegerField(widget = forms.HiddenInput)
+
 class DelegateField(forms.ModelChoiceField):
     def __init__(self, project, *args, **kwargs):
         queryset = User.objects.filter(userprofile__in = \
@@ -109,6 +114,7 @@ class UserProfileForm(forms.ModelForm):
 
 class OptionalDelegateField(DelegateField):
     no_change_choice = ('*', 'no change')
+    to_field_name = None
 
     def __init__(self, no_change_choice = None, *args, **kwargs):
         self.filter = None
@@ -135,6 +141,7 @@ class OptionalDelegateField(DelegateField):
 
 class OptionalModelChoiceField(forms.ModelChoiceField):
     no_change_choice = ('*', 'no change')
+    to_field_name = None
 
     def __init__(self, no_change_choice = None, *args, **kwargs):
         self.filter = None
@@ -179,6 +186,21 @@ class MultiplePatchForm(PatchForm):
         self.fields['delegate'] = OptionalDelegateField(project = project,
                 required = False)
 
+    def _clean_fields(self):
+        super(MultiplePatchForm, self)._clean_fields()
+        # remove optional fields
+        opts = self.instance._meta
+        for f in opts.fields:
+            if not f.name in self.cleaned_data:
+                continue
+
+            field = self.fields.get(f.name, None)
+            if field is None:
+                continue
+
+            if field.is_no_change(self.cleaned_data[f.name]):
+                del self.cleaned_data[f.name]
+
     def save(self, instance, commit = True):
         opts = instance.__class__._meta
         if self.errors: