class OptionalDelegateField(DelegateField):
no_change_choice = ('*', 'no change')
+ to_field_name = None
def __init__(self, no_change_choice = None, *args, **kwargs):
self.filter = None
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
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: