diff --git a/ietf/ietfauth/forms.py b/ietf/ietfauth/forms.py index 00abc084a..005a8e529 100644 --- a/ietf/ietfauth/forms.py +++ b/ietf/ietfauth/forms.py @@ -7,6 +7,8 @@ from django.contrib.auth.models import User from django.utils.html import mark_safe from django.core.urlresolvers import reverse as urlreverse +import debug # pyflakes:ignore + from ietf.person.models import Person, Email @@ -43,16 +45,30 @@ def ascii_cleaner(supposedly_ascii): raise forms.ValidationError("Please only enter ASCII characters.") return supposedly_ascii -class PersonForm(ModelForm): - class Meta: - model = Person - exclude = ('time', 'user') +def get_person_form(*args, **kwargs): - def clean_ascii(self): - return ascii_cleaner(self.cleaned_data.get("ascii") or u"") + exclude_list = ['time', 'user', 'photo_thumb', ] - def clean_ascii_short(self): - return ascii_cleaner(self.cleaned_data.get("ascii_short") or u"") + person = kwargs['instance'] + roles = person.role_set.all() + if not roles: + exclude_list += ['biography', 'photo', ] + + class PersonForm(ModelForm): + class Meta: + model = Person + exclude = exclude_list + + def __init__(self, *args, **kwargs): + super(ModelForm, self).__init__(*args, **kwargs) + + def clean_ascii(self): + return ascii_cleaner(self.cleaned_data.get("ascii") or u"") + + def clean_ascii_short(self): + return ascii_cleaner(self.cleaned_data.get("ascii_short") or u"") + + return PersonForm(*args, **kwargs) class NewEmailForm(forms.Form): diff --git a/ietf/ietfauth/views.py b/ietf/ietfauth/views.py index 8f4b9e475..f5296643d 100644 --- a/ietf/ietfauth/views.py +++ b/ietf/ietfauth/views.py @@ -44,7 +44,7 @@ from django.contrib.auth.models import User from ietf.group.models import Role from ietf.ietfauth.forms import RegistrationForm, PasswordForm, ResetPasswordForm, TestEmailForm -from ietf.ietfauth.forms import PersonForm, RoleEmailForm, NewEmailForm +from ietf.ietfauth.forms import get_person_form, RoleEmailForm, NewEmailForm from ietf.ietfauth.htpasswd import update_htpasswd_file from ietf.person.models import Person, Email, Alias from ietf.utils.mail import send_mail @@ -175,7 +175,7 @@ def profile(request): new_email_forms = [] if request.method == 'POST': - person_form = PersonForm(request.POST, instance=person) + person_form = get_person_form(request.POST, instance=person) for r in roles: r.email_form = RoleEmailForm(r, request.POST, prefix="role_%s" % r.pk) @@ -236,7 +236,7 @@ def profile(request): for r in roles: r.email_form = RoleEmailForm(r, prefix="role_%s" % r.pk) - person_form = PersonForm(instance=person) + person_form = get_person_form(instance=person) return render(request, 'registration/edit_profile.html', { 'user': request.user,