user.first_name = self.cleaned_data.get('first_name', '')
user.last_name = self.cleaned_data.get('last_name', '')
user.save()
+
+ # saving the userprofile causes the firstname/lastname to propagate
+ # to the person objects.
+ user.get_profile().save()
+
return user
def clean(self):
% 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 = \
+ queryset = User.objects.filter(userprofile__in = \
UserProfile.objects \
.filter(maintainer_projects = project) \
.values('pk').query)
class PatchForm(forms.ModelForm):
def __init__(self, instance = None, project = None, *args, **kwargs):
- if (not project) and instance:
+ if (not project) and instance:
project = instance.project
if not project:
- raise Exception("meep")
+ raise Exception("meep")
super(PatchForm, self).__init__(instance = instance, *args, **kwargs)
self.fields['delegate'] = DelegateField(project, required = False)
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
super(MultiplePatchForm, self).__init__(project = project,
*args, **kwargs)
self.fields['delegate'] = OptionalDelegateField(project = project,
- required = False)
+ 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