django-allauth使用keyOrder自定义社交登录注册表单

时间:2015-01-22 14:50:24

标签: python django forms django-allauth

使用Django 1.7并找出如何更改keyOrder,但问题是Sociallogin没有password1和password2字段,所以这不起作用:

class SignupForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(SignupForm, self).__init__(*args, **kwargs)
        fields_keyOrder = ['username', 'email','age', 'sex', 'password1', 'password2', 'captcha']
        if (self.fields.has_key('keyOrder')):
            self.fields.keyOrder = fields_keyOrder
        else:
            self.fields = OrderedDict((k, self.fields[k]) for k in fields_keyOrder)

我尝试在keyOrder中创建另一个没有password1的社交登记表单,但在尝试访问表单时出错:

class SocialSignupForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(SocialSignupForm, self).__init__(*args, **kwargs)
        fields_keyOrder = ['username', 'email','age', 'sex']
        if (self.fields.has_key('keyOrder')):
            self.fields.keyOrder = fields_keyOrder
        else:
            self.fields = OrderedDict((k, self.fields[k]) for k in fields_keyOrder)

错误:

init ()获得了一个意外的关键字参数'sociallogin'

1 个答案:

答案 0 :(得分:1)

我设法让它发挥作用。无需第二个注册表单,因此请从settings.py中删除此项: SOCIALACCOUNT_FORMS = {'注册':' yourapp.forms.SocialSignupForm'}

解决方案是添加 if hasattr(self,' sociallogin')

class SignupForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(SignupForm, self).__init__(*args, **kwargs)
        if hasattr(self, 'sociallogin'):
            fields_keyOrder = ['username', 'email', 'listening_device', 'age', 'sex']
        else:
            fields_keyOrder = ['username', 'email', 'listening_device', 'age', 'sex', 'password1', 'password2', 'captcha']
        if (self.fields.has_key('keyOrder')):
            self.fields.keyOrder = fields_keyOrder
        else:
            self.fields = OrderedDict((k, self.fields[k]) for k in fields_keyOrder)
相关问题