symposion_app/symposion/forms.py

59 lines
1.7 KiB
Python
Raw Normal View History

try:
from collections import OrderedDict
except ImportError:
OrderedDict = None
from django import forms
import account.forms
from django.utils.translation import ugettext_lazy as _
class SignupForm(account.forms.SignupForm):
2014-07-30 18:19:26 +00:00
first_name = forms.CharField(label=_("First name"))
last_name = forms.CharField(label=_("Last name"))
email_confirm = forms.EmailField(label=_("Confirm Email"))
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
key_order = [
"email",
"email_confirm",
"first_name",
"last_name",
"password",
"password_confirm"
]
self.fields = reorder_fields(self.fields, key_order)
2014-07-30 18:19:26 +00:00
def clean_email_confirm(self):
email = self.cleaned_data.get("email")
email_confirm = self.cleaned_data["email_confirm"]
if email:
if email != email_confirm:
2014-07-30 18:19:26 +00:00
raise forms.ValidationError(
_("Email address must match previously typed email address"))
return email_confirm
def reorder_fields(fields, order):
"""Reorder form fields by order, removing items not in order.
>>> reorder_fields(
... OrderedDict([('a', 1), ('b', 2), ('c', 3)]),
... ['b', 'c', 'a'])
OrderedDict([('b', 2), ('c', 3), ('a', 1)])
"""
for key, v in fields.items():
if key not in order:
del fields[key]
if not OrderedDict or hasattr(fields, "keyOrder"):
# fields is SortedDict
fields.keyOrder.sort(key=lambda k: order.index(k[0]))
return fields
else:
# fields is OrderedDict
return OrderedDict(sorted(fields.items(), key=lambda k: order.index(k[0])))