/apps/devmo/forms.py

https://github.com/Boldewyn/kuma · Python · 64 lines · 44 code · 15 blank · 5 comment · 7 complexity · 67e9824350923b12a09eec3ecfa831d4 MD5 · raw file

  1. from django import forms
  2. from django.contrib.auth.models import User, Group
  3. import constance.config
  4. from tower import ugettext_lazy as _
  5. from taggit.utils import parse_tags
  6. from devmo.models import UserProfile
  7. class UserProfileEditForm(forms.ModelForm):
  8. class Meta:
  9. model = UserProfile
  10. fields = ('fullname', 'title', 'organization', 'location',
  11. 'locale', 'timezone', 'bio', 'irc_nickname', 'interests')
  12. beta = forms.BooleanField(label=_('Beta User'), required=False)
  13. # Email is on the form, but is handled in the view separately
  14. email = forms.EmailField(label=_('Email'), required=True)
  15. interests = forms.CharField(label=_('Interests'),
  16. max_length=255, required=False)
  17. expertise = forms.CharField(label=_('Expertise'),
  18. max_length=255, required=False)
  19. def __init__(self, *args, **kwargs):
  20. super(UserProfileEditForm, self).__init__(*args, **kwargs)
  21. # Dynamically add URLFields for all sites defined in the model.
  22. sites = kwargs.get('sites', UserProfile.website_choices)
  23. for name, meta in sites:
  24. self.fields['websites_%s' % name] = forms.RegexField(
  25. regex=meta['regex'], required=False)
  26. self.fields['websites_%s' % name].widget.attrs['placeholder'] = meta['prefix']
  27. def clean_expertise(self):
  28. """Enforce expertise as a subset of interests"""
  29. cleaned_data = self.cleaned_data
  30. # bug 709938 - don't assume interests passed validation
  31. interests = set(parse_tags(cleaned_data.get('interests','')))
  32. expertise = set(parse_tags(cleaned_data['expertise']))
  33. if len(expertise) > 0 and not expertise.issubset(interests):
  34. raise forms.ValidationError(_("Areas of expertise must be a "
  35. "subset of interests"))
  36. return cleaned_data['expertise']
  37. def save(self, commit=True):
  38. try:
  39. user = User.objects.get(email=self.cleaned_data.get('email'))
  40. beta_group = Group.objects.get(
  41. name=constance.config.BETA_GROUP_NAME)
  42. if self.cleaned_data['beta']:
  43. beta_group.user_set.add(user)
  44. else:
  45. beta_group.user_set.remove(user)
  46. except Group.DoesNotExist:
  47. # If there's no Beta Testers group, ignore that logic
  48. pass
  49. return super(UserProfileEditForm, self).save(commit=True)