X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;ds=inline;f=apps%2Fpatchwork%2Fforms.py;h=2c137e3c027618e12ff223755272f4451813689e;hb=73960c4331e70da50b65ac753558578ada03d9ce;hp=18c6a5ef0aa30c0f5d9ba204370f4b410a8eb776;hpb=aec7cf5771cd3244e024aada3b51a3d58b1af2f0;p=patchwork diff --git a/apps/patchwork/forms.py b/apps/patchwork/forms.py index 18c6a5e..2c137e3 100644 --- a/apps/patchwork/forms.py +++ b/apps/patchwork/forms.py @@ -44,6 +44,11 @@ class RegistrationForm(RegistrationFormUniqueEmail): 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): @@ -75,9 +80,14 @@ 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 = \ + queryset = User.objects.filter(userprofile__in = \ UserProfile.objects \ .filter(maintainer_projects = project) \ .values('pk').query) @@ -86,10 +96,10 @@ class DelegateField(forms.ModelChoiceField): 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) @@ -104,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 @@ -130,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 @@ -171,7 +183,23 @@ class MultiplePatchForm(PatchForm): def __init__(self, project, *args, **kwargs): super(MultiplePatchForm, self).__init__(project = project, *args, **kwargs) - self.fields['delegate'] = OptionalDelegateField(project = project) + 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 @@ -184,7 +212,7 @@ class MultiplePatchForm(PatchForm): if not f.name in data: continue - field = getattr(self, f.name, None) + field = self.fields.get(f.name, None) if not field: continue