[ПРИМЕЧАНИЕ: этот ответ в настоящее время полностью устарел - см. Обсуждение ниже и более свежие ответы].
Если f
- это форма, ее поля равны f.fields
, то есть django.utils.datastructures.SortedDict
(элементы представлены в порядке их добавления). После построения формы f.fields имеет атрибут keyOrder, представляющий собой список, содержащий имена полей в порядке их представления. Вы можете установить это в правильном порядке (хотя вам нужно проявлять осторожность, чтобы не пропустить элементы или добавить дополнительные).
Вот пример, который я только что создал в своем текущем проекте:
class PrivEdit(ModelForm):
def __init__(self, *args, **kw):
super(ModelForm, self).__init__(*args, **kw)
self.fields.keyOrder = [
'super_user',
'all_districts',
'multi_district',
'all_schools',
'manage_users',
'direct_login',
'student_detail',
'license']
class Meta:
model = Privilege