From fa66316f8aca59ecdf70ea10adcdfe20fcc11690 2015-07-20 02:54:30 From: Hiroshi Miura Date: 2015-07-20 02:54:30 Subject: [PATCH] form key ordering: detect django version - Django 1.6 and before use SortedDict instead of OrderedDict It detect version and return proper dict for key ordering. - field deletion is done by reorder funcion. Signed-off-by: Hiroshi Miura --- diff --git a/symposion/forms.py b/symposion/forms.py index dcf96e3d83ac7d6537d810c5505a7444d2f7e69d..e207a0fd85bbc0c7bcfd21827ca27ce64dcd8574 100644 --- a/symposion/forms.py +++ b/symposion/forms.py @@ -1,6 +1,7 @@ from collections import OrderedDict from django import forms +from django import VERSION as django_VERSION import account.forms @@ -13,7 +14,6 @@ class SignupForm(account.forms.SignupForm): def __init__(self, *args, **kwargs): super(SignupForm, self).__init__(*args, **kwargs) - del self.fields["username"] key_order = [ "email", "email_confirm", @@ -46,4 +46,10 @@ def reorder_fields(fields, order): if key not in order: del fields[key] - return OrderedDict(sorted(fields.items(), key=lambda k: order.index(k[0]))) + if django_VERSION < (1, 7, 0): + # 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])))