django-allauth:重新排列表单字段(更改顺序)

时间:2013-11-24 15:21:05

标签: django forms django-allauth

我正在尝试使用django-allauth进行用户注册。我有这个表格

class UserProfileForm(forms.ModelForm):
class Meta:
    model = UserProfile
    fields = ('gender', 'country', 'city', 'birth_date', 'has_accepted_tos')

根据我在settings.py中设置的说明

ACCOUNT_SIGNUP_FORM_CLASS = "userprofile.forms.UserProfileForm"

问题在于,当表单呈现我的自定义表单要求性别时,国家/地区等呈现在顶部,然后是标准用户字段,要求输入用户名,电子邮件和密码。按顺序排列的东西:

  • 性别
  • 国家
  • 城市
  • birth_date
  • has_accepted_tos
  • 用户名
  • 电子邮件
  • 密码1
  • 密码2

    我想按此顺序显示字段

  • 用户名

  • 电子邮件
  • 密码1
  • 密码2
  • 性别
  • 国家

1 个答案:

答案 0 :(得分:6)

您需要提供field_order属性:

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('gender', 'country', 'city', 'birth_date', 'has_accepted_tos')
        field_order = ['username', 'email', 'password1', 'password2', 'gender', 'country']

但是,更好的做法是使用模板文件完全按照您的意愿呈现表单。

引用项目作者:

  

(...)然后,我不会过分强调allauth的含义   提供开箱即用的显示/设计明智。所有这一切都只是为了   参考,想法是你创造一个合适的设计&表格布局   在你的模板中。

参考文献:

[1] https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py

[2] https://github.com/pennersr/django-allauth/issues/269