Django 保留自定义注册类并在同一forms.py文件中导入allauth表单导致导入错误

Django 保留自定义注册类并在同一forms.py文件中导入allauth表单导致导入错误,django,forms,import,django-allauth,Django,Forms,Import,Django Allauth,我在app.forms.py文件中有这样的结构,我在其中导入allauth内置的forms LoginForm ResetPasswordForm等,并在同一文件中定义自定义注册类 自定义注册类的挂钩: ACCOUNT_SIGNUP_FORM_CLASS='allauth_core.forms.MySignupForm' 我想我碰到了循环进口问题,但不知道为什么 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/a

我在app.forms.py文件中有这样的结构,我在其中导入allauth内置的forms LoginForm ResetPasswordForm等,并在同一文件中定义自定义注册类

自定义注册类的挂钩: ACCOUNT_SIGNUP_FORM_CLASS='allauth_core.forms.MySignupForm'

我想我碰到了循环进口问题,但不知道为什么

文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/allauth/url.py”,第8行,在 urlpatterns=[url('^',include('allauth.account.url'))] 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/django/conf/url/init.py”,第52行,包含在include中 urlconf_模块=导入_模块(urlconf_模块) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/init.py”,第37行,在导入模块中 导入(名称) 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/allauth/account/url.py”,第4行,在 从…起导入视图 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/allauth/account/views.py”,第19行,在 从。表格导入( 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/allauth/account/forms.py”,第206行,在 类BaseSignupForm(\u base\u signup\u form\u class()): 文件“/Users/rmahamuni/.virtualenvs/todo/lib/python2.7/site packages/allauth/account/forms.py”,第188行,在基本注册表单类中 ““%s””%(fc_模块,e)) django.core.exceptions.ImpropertlyConfigured:导入表单类allauth_core.forms时出错:“无法导入名称更改PasswordForm”

如果我在单独的文件中保留自定义注册表格,那么我就不会收到这个问题

我尝试切换已安装的应用程序列表

from django import forms
from allauth.account.forms import (LoginForm, ChangePasswordForm,
                               ResetPasswordForm, SetPasswordForm, ResetPasswordKeyForm)  
from django.contrib.auth import get_user_model  
from crispy_forms.helper import FormHelper  
from crispy_forms.layout import Layout, Div, Submit, HTML, Button, Row, Field  
from crispy_forms.bootstrap import AppendedText, PrependedText, FormActions  
from django.core.urlresolvers import reverse  


class MySignupForm(forms.Form):
    class Meta:
        model = get_user_model()
        fields = ['email', 'first_name', 'last_name']

    def __init__(self, *args, **kwargs):
        super(MySignupForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.fields["email"].widget.input_type = "email"  # ugly hack
        self.helper.form_method = "POST"
        self.helper.form_action = "account_signup"
        self.helper.form_id = "signup_form"
        self.helper.form_class = "signup"
        self.helper.layout = Layout(
            Field('email', placeholder="Enter Email", autofocus=""),
            Field('first_name', placeholder="Enter First Name"),
            Field('last_name', placeholder="Enter Last Name"),
            Field('password1', placeholder="Enter Password"),
            Field('password2', placeholder="Re-enter Password"),
        Submit('sign_up', 'Sign up', css_class="btn-warning"),
        )

    def signup(self, request, user):
        pass


class MyLoginForm(LoginForm):
    remember_me = forms.BooleanField(required=False, initial=False)

    def __init__(self, *args, **kwargs):
        super(MyLoginForm, self).__init__(*args, **kwargs)


class MyPasswordChangeForm(ChangePasswordForm):

    def __init__(self, *args, **kwargs):
        super(MyPasswordChangeForm, self).__init__(*args, **kwargs)
“allauth”,
“allauth.账户”,
“allauth.socialaccount”,

“allauth_core”,发生这种情况的原因是,
allauth
试图在其
account/forms.py
中导入您在
settings.py
中指定为注册表单的给定模块/类。(见附件)

当您通过导入
allauth
account/forms.py
覆盖settings.py中的其他表单(如
ChangePasswordForm
)时,会发生循环导入,因为allauth已经在其
forms.py
中导入了您的
forms.py


为了避免这种情况,只需将singup表单移动到单独的
signupform.py
,并相应地更改设置。它会起作用。

发生这种情况是因为
allauth
尝试导入您在
settings.py
account/forms.py
中指定为注册表单的给定模块/类。(见附件)

当您通过导入
allauth
account/forms.py
覆盖settings.py中的其他表单(如
ChangePasswordForm
)时,会发生循环导入,因为allauth已经在其
forms.py
中导入了您的
forms.py


为了避免这种情况,只需将singup表单移动到单独的
signupform.py
,并相应地更改设置。它会起作用。

MyLoginForm MyPasswordChangeForm只是为了更好的用户界面而提供的简洁表单,实际上并没有覆盖所有的登录/密码更改表单。但是注册类实际上覆盖了allauth sing-up类。MyLoginForm MyPasswordChangeForm只是为了更好的用户界面而提供的简单表单,而不是覆盖allauth登录/密码更改表单。但是注册类实际上覆盖了allauth sing up类。谢谢@v1k45的解释,是的,我已经将该类移到了单独的文件中。。但是我没有得到表单加载的确切位置。谢谢@v1k45的解释,是的,我已经将类移动到了单独的文件中。。但我没有弄清楚表单加载的确切位置。
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth_core',  <-- app where form is located.